繁体   English   中英

如何将每个数组元素追加到循环内的前一个数组元素

[英]How to append every array element to the previous array elements inside of a loop

我已经尽了最大努力,但我似乎无法弄清楚如何正确地为此问题。

所以我开始将一个字符串拆分成一个空格出现的数组。

$str = "a nice and sunny day today";
$split = explode(' ', $str);

我怎么可能留下一个如下所示的数组:

$new[0] = 'a';
$new[1] = 'a nice';
$new[2] = 'a nice and';
$new[3] = 'a nice and sunny';

而不是手动执行此操作

$new[] = $split[0];
$new[] = $split[0] . $split[1];
$new[] = $split[0] . $split[1] . $split[2];
$new[] = $split[0] . $split[1] . $split[2] . $split[3];

你可能会看到正在发生的模式。

现在,因为这可能发生在15个单词左右,我正在尝试使用foreach /某种函数找出一个更短的方法。 有任何想法吗?

$tmp = array();
$new = array();
for($i = 0; $i < count($split); $i++)
  {
    $tmp[] = $split[$i];
    $new[] = implode(' ',$tmp);
  }

更短的代码,逆序:

$new = array();
for($i = count($split); $i >= 0; $i--)
  {
    $new[] = implode(' ',$split);
    array_pop($split);
  }

根据array_reverse()当然不是问题

你可以这样做:

$str = "a nice and sunny day today";
$split = explode(' ', $str);

$newList = array();
// Non-empty string?
if($str) {
    // Add the first element
    $newList[] = $split[0];
    for($i = 1; $i < count($split); $i++) {
        // New element gets appended with previous
        $newList[] = $newList[$i-1] . " " . $split[$i];
    }
}

这比每次执行implode更有效,因为我们只连接当前和前一个字符串。

但是还有一点效率低下 - 我们每次都在调用count 让我们不要那样做。

$newList[] = $split[0]
for($i = 1, $len = count($split); $i < $len; $i++) {
    // New element gets appended with previous
    $newList[] = $newList[$i-1] . " " . $split[$i];
}
<?php
$str = "1 2 3";
$split = explode(' ', $str);
/* 
now $split is array('1','2','3')

Need to convert it to: array('1','1 2','1 2 3')
*/
$n = count($split);
$output = array();
for ($i = 0; $i < $n; ++$i)
{
    $output[$i] = "";
    for ($j = 0; $j <= $i; ++$j)
    {
        $output[$i] .= $split[$j];
        if ($j != $i)
        {
            $output[$i] .= " ";
        }
    }
}

var_dump($output);

输出:

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(3) "1 2"
  [2]=>
  string(5) "1 2 3"
}

只需在循环中构建字符串并添加到数组中。

$str = "a nice and sunny day today";
$split = explode(' ', $str);
$final_array = array();

$i = 0;
$string = '';
$spacer = '';
for ($i = 0; $i < count($split); $i++) {
    $string .= $spacer . $split[$i];
    $final_array[] = $string;
    $spacer = ' ';
}

您可以将array_map()与回调函数一起使用来实现此目的:

$result = array_filter(array_map(function($k) use($split) { 
    return implode(' ', array_slice($split, 0, $k)); 
}, array_keys($split)));

print_r(array_values($result));

输出:

Array
(
    [0] => a
    [1] => a nice
    [2] => a nice and
    [3] => a nice and sunny
    [4] => a nice and sunny day
)

演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM