尝试用foreach循环按字母顺序合并数组。
<?php
$fruits = array(
'Apple' => array('ids'=>array(1,2)),
'Banana' => array('ids'=>array(3,4)),
'Ananas' => array('ids'=>array(5,6))
);
$result = array();
foreach ($fruits as $name=>$subarr) {
$first_letter = mb_substr($name, 0, 1);
$result[$first_letter] = $subarr;
}
print_r($result);给我类似的smth
大堆([A] =>阵列([ids]=>阵列([0]=>5[1] =>6))而不是类似于smth的[B] => Array ( [ids] => Array ( [0] => 3 [1] => 4 ) )
)
[A] =>阵列([ids]=>阵列([0]=>1[1] =>2[2] =>5[3] =>6))
我该怎么修?
您在这一行中的每次迭代都覆盖您的结果:
$result[$first_letter] = $subarr;
如果结果数组中的subArray不存在,只需创建一个新数组,并将ids
子数组合并到结果数组中。
foreach ($fruits as $name=>$subarr) {
$first_letter = mb_substr($name, 0, 1);
if(!isset($result[$first_letter]))
$result[$first_letter] = [];
$result[$first_letter] = array_merge($result[$first_letter], $subarr["ids"]);
}
请尝试使用foreach循环。
$fruits = array(
'Apple' => array('ids'=>array(1,2)),
'Banana' => array('ids'=>array(3,4)),
'Ananas' => array('ids'=>array(5,6))
);
$result = array();
foreach ($fruits as $name=>$subarr) {
$first_letter = mb_substr($name, 0, 1);
foreach($subarr as $key=>$value){
foreach ($value as $gkey => $gvalue) {
$result[$first_letter]['ids'][] = $gvalue;
}
}
}
echo "<pre>";
print_r($result);
显示上面的代码输出,如下所示。
Array
(
[A] => Array
(
[ids] => Array
(
[0] => 1
[1] => 2
[2] => 5
[3] => 6
)
)
[B] => Array
(
[ids] => Array
(
[0] => 3
[1] => 4
)
)
)