0

假设我有一个包含: 的数组apples, watermelons, grapes。我想要做的是创建另一个数组

apples, apples;watermelons, apples;watermelons;grapes

我尝试使用 implode,但这并不是我想要的。此任务是否有内置功能?谢谢!

编辑:为澄清起见,创建的字符串基本上是这三个元素的组合。所以创建的数组也可能如下所示:

apples, apples-watermelons, apples-watermelons-grapes

4

3 回答 3

2
<?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_*()功能之一。

于 2012-08-09T03:06:19.337 回答
2

一种优雅的方法是使用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"
}
于 2012-08-09T03:27:00.977 回答
1
<?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
)
于 2012-08-09T03:34:06.027 回答