【问题标题】:merging subarrays of multidimensional arrays while sorting array alphabetically在按字母顺序排序数组时合并多维数组的子数组
【发布时间】:2016-01-09 04:53:36
【问题描述】:

尝试使用 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); 给我的感觉就像

大批 ( [A] => 数组 ( [ids] => 数组 ( [0] => 5 [1] => 6 ) )
[B] => Array
    (
        [ids] => Array
            (
                [0] => 3
                [1] => 4
            )
    )

)

而不是像 [A] => 数组 ( [ids] => 数组 ( [0] => 1 [1] => 2 [2] => 5 [3] => 6 ) )

我该如何解决?

【问题讨论】:

  • 你能解释一下你为什么期望这个数组结构吗?

标签: php arrays multidimensional-array merge


【解决方案1】:

您在此行中的每次迭代都会覆盖您的结果:

$result[$first_letter] = $subarr;

如果结果数组中的子数组不存在,只需创建一个新数组,并将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"]);
}

【讨论】:

    【解决方案2】:

    请尝试使用 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
                    )
    
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多