【问题标题】:Split multidimensional array into arrays将多维数组拆分为数组
【发布时间】:2016-09-03 22:30:30
【问题描述】:

所以我有一个看起来像这样的表单帖子的结果:

$data = [
    'id_1' => [ 
        '0' => 1,
        '1' => 2
     ],
    'id_2' => [ 
        '0' => 3,
        '1' => 4
    ],
    'id_3' => [ 
        '0' => 5,
        '1' => 6
    ]
];

我想要实现的是将这个数组分成两个不同的数组,如下所示:

$item_1 = [
    'id_1' => 1,
    'id_2' => 3,
    'id_3' => 5
]

$item_2 = [
    'id_1' => 2,
    'id_2' => 4,
    'id_3' => 6
]

我已经尝试过使用所有正确的数组方法,例如带有循环的 array_chunk、array_merge,但我似乎无法思考如何实现这一点。我看过很多类似的帖子,其中第一个键没有像我的数组那样的名称(id_1、id_2、id_3)。但在我的情况下,键的名称至关重要,因为它们需要设置为各个数组中键的名称。

【问题讨论】:

  • array_column 可能有用,但如果您需要密钥,可能不会。一个简单的 foreach 可能是最好的选择。

标签: php arrays multidimensional-array


【解决方案1】:

很难找到比这短得多的:

$item1 = array_map('reset', $data);
$item2 = array_map('end', $data);

说明

array_map 期望回调函数作为其第一个参数。在第一行中这是reset,因此reset 将在$data 的每个元素上调用,有效地获取子数组的第一个元素值。 array_map 将这些结果组合到一个新数组中,保留原始键。

第二行做同样的事情,但使用函数end,它有效地获取子数组的最后一个元素的值。

resetend 都移动内部数组指针这一事实无关紧要。这里唯一重要的是,它们还返回了将指针指向的元素的值。

【讨论】:

    【解决方案2】:

    没有循环的解决方案,只是为了好玩:

    $result = [[], []];
    $keys = array_keys($data);
    array_map(function($item) use(&$result, &$keys) {
        $key = array_shift($keys);
        $result[0][$key] = $item[0];
        $result[1][$key] = $item[1];
    }, $data);
    

    【讨论】:

    • 如果你要扔掉结果,为什么不array_walk
    • @Jon array_map 和 array_walk 有不同的用途。我不想像 array_walk 那样修改现有数组。我想生成一个结构完全不同的新结构。
    • array_walk 除了循环之外什么都不做。 array_map 循环 and 构造一个要返回的数组。一般来说,array_maparray_walkforwhile 是等价的:任何你可以用一个写的东西,你也可以用另一个写。当然每个都打算在不同的情况下使用,array_map 不打算这样使用。您不必费心从回调中返回任何内容,因此 PHP 构建了一个 null 数组,然后将其丢弃(您不保存返回值)。这是我的观点。
    【解决方案3】:

    只需一个普通的foreach 循环即可。

    $item_1 = [];
    $item_2 = [];
    foreach ($data as $k => $v){
        $item_1[$k] = $v[0];
        $item_2[$k] = $v[1];
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多