简体   繁体   English

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

[英]merging subarrays of multidimensional arrays while sorting array alphabetically

Trying to alphabetically merge arrays with foreach loop. 尝试按字母顺序将数组与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); print_r($ result); gives me smth like 给我像

Array
(
    [A] => Array
        (
            [ids] => Array
                (
                    [0] => 5
                    [1] => 6
                )
        )

[B] => Array
    (
        [ids] => Array
            (
                [0] => 3
                [1] => 4
            )
    )

)

instead of smth like 而不是像

\n    [A] => Array [A] =>数组\n        ( \n            [ids] => Array [ids] =>数组\n                ( \n                    [0] => 1 [0] => 1\n                    [1] => 2 [1] => 2\n                    [2] => 5 [2] => 5\n                    [3] => 6 [3] => 6\n                ) \n        ) \n

how can I fix it? 我该如何解决?

You overwrite your result every iteration in this line: 您会在此行的每次迭代中覆盖结果:

$result[$first_letter] = $subarr;

Just create a new array if the subArray in the result array doesn't exists and merge the ids subArray into your result array. 如果结果数组中的subArray不存在,则只需创建一个新数组,然后将ids subArray合并到结果数组中即可。

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"]);
}

Please try to use foreach loop. 请尝试使用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);

Display above code output like below. 显示上面的代码输出,如下所示。

Array
(
    [A] => Array
        (
            [ids] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 5
                    [3] => 6
                )

        )

    [B] => Array
        (
            [ids] => Array
                (
                    [0] => 3
                    [1] => 4
                )

        )

)

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

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