【问题标题】:PHP Multidimensional Array Combine Values With The Same Index NumberPHP多维数组组合具有相同索引号的值
【发布时间】:2021-05-08 13:05:15
【问题描述】:

我有这个多维数组结构:

Array
(
    [0] => Array
        (
            [0] => 0.5
        )

    [1] => Array
        (
            [1] => 0.9
        )

    [2] => Array
        (
            [1] => 0.6
        )

    [3] => Array
        (
            [0] => 0.3
        )

)

我想要的是将具有相同索引号的值组合起来。我想要的输出应该是:

Array
(
    [0] => Array
        (
            [0] => 0.5,
            [1] => 0.3
        )

    [1] => Array
        (
            [0] => 0.9,
            [1] => 0.6
        )

)

我是初学者,仍在学习基础知识。请帮忙。谢谢。

【问题讨论】:

  • 您可以从 foreach 循环开始,在某个数组中收集索引,然后再次循环和分配。

标签: php arrays multidimensional-array


【解决方案1】:

您可以创建一个新数组$res,它最终将包含您的分组值的嵌套数组。使用foreach,您可以从起始数组循环遍历每个内部数组,然后对于每个内部数组,循环遍历其中的键/值。内部数组的键是结果数组 ($res) 中的索引,当前的$val 应该被推入其中。

更多详细信息,请参见下面示例中的代码 cmets:

$res = [];
foreach($arr as $inner) { // loop through each inner array `[0 => 0.5]`, `[1 => 0.9]` etc...
  foreach($inner as $key=>$val) { // for each key (0, 1, etc) and value (0.5, 0.9, etc) populate your $res
    $res[$key][] = $val; // append $val to the array at index $key, if the array doesn't exist, create it and add $val
  }
}
print_r($res);

输出:

Array
(
    [0] => Array
        (
            [0] => 0.5
            [1] => 0.3
        )

    [1] => Array
        (
            [0] => 0.9
            [1] => 0.6
        )
)

点击here查看可运行示例

【讨论】:

    【解决方案2】:

    如果这些索引值是一个固定且有限的集合,那么您可以简单地执行以下操作:

    <?php
    $input = [
      [ 0 => 0.5 ],
      [ 1 => 0.9 ],
      [ 1 => 0.6 ],
      [ 0 => 0.3 ]
    ];
    
    $output = [
      0 => array_column($input, 0), 
      1 => array_column($input, 1)
    ];
    
    print_r($output);
    

    动态解决方案的另一种方法是:

    <?php
    $input = [
      [ 0 => 0.5 ],
      [ 1 => 0.9 ],
      [ 1 => 0.6 ],
      [ 0 => 0.3 ]
    ];
    
    $output = [];
    array_walk($input, function($entry) use (&$output) {
      $output[array_keys($entry)[0]][] = array_values($entry)[0];
    });
    
    print_r($output);
    

    这两种情况的输出显然是:

    Array
    (
        [0] => Array
            (
                [0] => 0.5
                [1] => 0.3
            )
        [1] => Array
            (
                [0] => 0.9
                [1] => 0.6
            )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 2015-01-04
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      相关资源
      最近更新 更多