【问题标题】:Building increasingly long strings from an array从数组构建越来越长的字符串
【发布时间】:2016-02-26 12:58:40
【问题描述】:

我正在编写一个 PHP 函数,它将采用以下格式的数组:

array(
    'one',
    'two',
    'three'
)

并回显以下字符串:

one
one-two
one-two-three

我不知道该怎么做。我试过用一个变量来存储前一个然后使用它,但它只适用于一个:

$previous = null;
for($i = 0; $i < count($list); $i++) {
    echo ($previous != null ? $route[$previous] . "-" : '') . $route[$i];
    $previous = $i;
}

输出:

one
two
two-three

无论如何,这种方法可能效率低下,因为这个脚本在技术上应该能够处理任何长度的数组。

有人可以帮忙吗?

【问题讨论】:

  • 你想创建所有可能的关联还是每次迭代只添加一个字符串?
  • 我认为目前每次迭代只有一个字符串。

标签: php arrays string


【解决方案1】:
for ($i = 1, $length = count($array); $i <= $length; $i++) {
    echo join('-', array_slice($array, 0, $i)), PHP_EOL;
}

【讨论】:

    【解决方案2】:
    $arr = array('one', 'two', 'three');
    
    foreach (array_keys($arr) as $index) {
        $result = array();
        foreach ($arr as $key => $val) {
            if ($key <= $index) {
                 $result[] = $val;
            }
        }
        echo implode('-', $result) . '<br />';
    }
    

    【讨论】:

      【解决方案3】:

      你在比较 0 != null,问题出在只比较一个 =,试试 !==,应该可以。

      【讨论】:

        【解决方案4】:

        另一个:

        $data = array('one','two','three');
        $str = '';
        $len = count($data);
        for ($i=0; $i<$len;$i++){
        $delim = ($i > 0) ? '-' : '';
        $str .=     $delim . $data[$i];
        echo $str .'<br>';
        }
        

        【讨论】:

          【解决方案5】:

          我们可以使用array_shift() 来从数组中提取第一个元素。然后我们可以遍历这些值并将它们附加到一个字符串中:

          <?php
          
          $array = array(
              'one',
              'two',
              'three'
          );
          
          // Get the first element from the array (it will be removed from the array)
          $string = array_shift($array);
          echo $string."\n";
          
          foreach ($array as $word) {
              $string = implode('-', array($string, $word));
              echo $string."\n";
          }
          

          输出:

          one
          one-two
          one-two-three
          

          Demo in Codepad.

          【讨论】:

            【解决方案6】:
            $arr = ['one','two','three'];
            
            doSomething($arr);
            
            function doSomething($arr) {
              foreach($arr as $key=>$val) {
                  $s = array_slice($arr,0,($key+1));
                  echo implode('-',$s) . "<br>";
              }
            }
            

            【讨论】:

              【解决方案7】:

              使用array_sliceimplode 函数

              foreach($arr as $key => $value){
                  echo implode("-",array_slice($arr, 0, $key+1))."<br/>";
              }
              

              o/p

              one
              one-two
              one-two-three
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-06-24
                • 1970-01-01
                • 2020-11-15
                • 2019-07-05
                • 1970-01-01
                • 1970-01-01
                • 2019-10-25
                相关资源
                最近更新 更多