假设我有一个包含: 的数组apples, watermelons, grapes
。我想要做的是创建另一个数组
apples, apples;watermelons, apples;watermelons;grapes
我尝试使用 implode,但这并不是我想要的。此任务是否有内置功能?谢谢!
编辑:为澄清起见,创建的字符串基本上是这三个元素的组合。所以创建的数组也可能如下所示:
apples, apples-watermelons, apples-watermelons-grapes
<?php
$my_array = array('apples','watermelons','grapes');
$string = '';
$result = array();
for ($i=0; $i<count($my_array); $i++) {
$string .= $my_array[$i];
$result[] = $string;
$string .= '-';
}
print_r($result);
也可能有一种方法可以使用array_walk()
或array_map()
或其他array_*()
功能之一。
一种优雅的方法是使用array_reduce
<?php
$my_array = array('apples','watermelons','grapes');
function collapse($result, $item) {
$result[] = end($result) !== FALSE ? end($result) . ';' . $item : $item;
return $result;
}
$collapsed = array_reduce($my_array, "collapse", array());
var_dump($collapsed);
?>
测试:
matt@wraith:~/Dropbox/Public/StackOverflow$ php 11876147.php
array(3) {
[0]=>
string(6) "apples"
[1]=>
string(18) "apples;watermelons"
[2]=>
string(25) "apples;watermelons;grapes"
}
<?php
$array = array("apples", "watermelons", "grapes");
$newarray = $array;
for ($i = 1; $i < count($array); $i++)
{
$newarray[$i] = $newarray[$i - 1] . ";" . $newarray[$i] ;
}
print_r($newarray);
?>
输出:
Array
(
[0] => apples
[1] => apples;watermelons
[2] => apples;watermelons;grapes
)