csv 在PHP中,如何将一个具有键值对的数组转换为一个具有单独的键值子数组的数组?

biswetbf  于 2023-06-03  发布在  PHP
关注(0)|答案(1)|浏览(347)

将数组[fields => values]转换为[fields,values]
如果我有一个这样的数组:

[
field1 => value1,
field2 => value2,
field3 => value3
];

我想把它转换成这样的数组:

[
[field1, field2, field3],
[value1, value2, value3]
];

现在我只是把键和值放在另一个数组中:

[
array_keys($array),
array_values($array)
];

有没有更优雅的方式来做到这一点?

hmae6n7t

hmae6n7t1#

在考虑“优雅”之前,首先考虑输出一致性。如果你总是想创建一个有两个第一级元素的数组,你的方法是合适的。
然而,如果你想要一个空的输出数组,当你的输入数组是空的,你需要一个不同的方法,结果数组只在必要的时候加深,比如...
代码:(Demo

$result = [];
foreach ($array as $k => $v) {
    $result[0][] = $k;
    $result[1][] = $v;
}
var_export($result);

如果你总是想要一个两个元素的结果,无体循环可以以一种简洁的方式避免任何函数调用。(Demo

$result = [[], []];
foreach ($array as $result[0][] => $result[1][]);
var_export($result);

使用array_reduce()进行函数式编程可能会变得丑陋/冗长。(Demo

var_export(
    array_reduce(
        array_keys($array),
        function ($result, $k) use ($array) {
            $result[0][] = $k;
            $result[1][] = $array[$k];
            return $result;
        },
        []
    )
);

如果你考虑使用array_walk(),它的工作方式就像foreach()一样,因为它不会将结果有效负载作为返回值传递。
如果你认为函数式编程是优雅的,请记住,当输入数组中只有一个或更少的元素时,array-map()调用的双转置将不起作用。Proof

相关问题