【问题标题】:How to merge first level keys with their second level values and remove all associative keys?如何将第一级键与其第二级值合并并删除所有关联键?
【发布时间】:2018-08-28 19:07:22
【问题描述】:

我有这样的数组:

Array (
    [2018-03-12] => Array (
        [United States] => 4
        [Australia] => 15
        [United Kingdom] => 0
        [New Zealand] => 0
    )
    [2018-03-13] => Array (
        [United States] => 0
        [Australia] => 8
        [United Kingdom] => 2
        [New Zealand] => 0
    )
)

我想做一个这样的数组:

[
    ["2018-03-12", 4, 15, 0, 0],
    ["2018-03-13", 0, 8, 0, 2]
]

如何做到这一点?

【问题讨论】:

标签: php multidimensional-array indexing array-merge


【解决方案1】:

您只需要迭代每个顶级元素,然后将键合并/存储为元素和子数组值。

代码:(Demo)

$array = [
    '2018-03-12' => [
         'United States' => 4,
         'Australia' => 15,
         'United Kingdom' => 0,
         'New Zealand' => 0,
    ],
    '2018-03-13' => [
         'United States' => 0,
         'Australia' => 8,
         'United Kingdom' => 2,
         'New Zealand' => 0,
    ]
];

foreach ($array as $key => $subarray) {
        $result[] = array_merge([$key], array_values($subarray));
}
var_export($result);

输出:

array (
  0 => 
  array (
    0 => '2018-03-12',
    1 => 4,
    2 => 15,
    3 => 0,
    4 => 0,
  ),
  1 => 
  array (
    0 => '2018-03-13',
    1 => 0,
    2 => 8,
    3 => 2,
    4 => 0,
  ),
)

或者您可以将键移到子数组中并重新索引两个级别。

foreach ($array as $key => $subarray) {
    array_unshift($subarray, $key);
    $result[] = array_values($subarray);
}

或者您可以使用联合运算符将键与子数组元素合并,然后重新索引。

foreach ($array as $key => $subarray) {
    $result[] = array_values([$key] + $subarray);
}

如果您的 php 版本允许可变参数,您甚至可以将子数组解压到 array_push 调用中。

foreach ($array as $key => $subarray) {
    $temp = [];
    array_push($temp, $key, ...array_values($subarray));
    $result[] = $temp;
}

【讨论】:

  • 谢谢,但我想让结果数组像 0 => '2018-03-13', 1 => '0', 2 => '8' 3 => '2' , , ),
  • 好的。我知道了。固定。
  • 感谢 @mickmackusa 给我另一种解决问题的方法
【解决方案2】:

试试:

$arr = [
    '2018-03-12' => [
        'United States' => 4,
         'Australia' => 15,
         'United Kingdom' => 0,
         'New Zealand' => 0,
    ],
    '2018-03-13' => [
         'United States' => 0,
         'Australia' => 8,
         'United Kingdom' => 2,
         'New Zealand' => 0,
    ]
];

return array_map(function ($item, $key) {
    return array_merge([$key], array_values($item));
},$arr, array_keys($arr));

演示https://implode.io/K8yHG0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多