合并多维数组的子数组,同时按字母顺序对数组进行排序


merging subarrays of multidimensional arrays while sorting array alphabetically

尝试用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))
[B] => Array
    (
        [ids] => Array
            (
                [0] => 3
                [1] => 4
            )
    )

)

而不是类似于smth的
[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
                )
        )
)