从数组中构建越来越长的字符串

5

我正在编写一个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

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

有人能帮忙吗?


你想创建所有可能的关联还是每次迭代只添加一个字符串? - A.L
每次迭代只有一个字符串,我认为目前是这样的。 - Forest
7个回答

6
for ($i = 1, $length = count($array); $i <= $length; $i++) {
    echo join('-', array_slice($array, 0, $i)), PHP_EOL;
}

3

您正在比较0 != null,问题出在只使用一个=进行比较,尝试使用!==,它应该可以工作。


3
$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 />';
}

2

另一个例子:

$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>';
}

2
我们可以使用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

Codepad演示


2
$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>";
  }
}

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

输出
one
one-two
one-two-three

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接