PHP中如何将指定JSON数组格式转换为目标对象格式?
在PHP中实现数组结构转换的几种方法
嘿,这个转换需求在PHP里其实有好几种实用的实现方式,我给你整理了几个常用的:
方法一:基础foreach循环(最直观易理解)
这是最基础也最容易调试的方式,适合所有场景,哪怕原数组里的键名不固定也能处理:
$originalArray = [ ["value-1" => "azerty", "value-2" => "azerty"], ["value-1" => "azerty", "value-2" => "azerty"] ]; $result = []; foreach ($originalArray as $item) { foreach ($item as $key => $value) { // 如果结果数组里还没有这个键,先初始化一个空数组 if (!isset($result[$key])) { $result[$key] = []; } // 把当前值追加到对应键的数组里 $result[$key][] = $value; } } print_r($result);
这种方式的好处是逻辑清晰,哪怕是新手也能一眼看懂,而且能自动适配原数组里的所有键名,不需要提前知道有哪些key。
方法二:用array_column函数(简洁高效,适合已知键名的场景)
如果已经明确知道要提取的键名(比如这里的value-1和value-2),用PHP内置的array_column会更简洁:
$originalArray = [ ["value-1" => "azerty", "value-2" => "azerty"], ["value-1" => "azerty", "value-2" => "azerty"] ]; $result = [ "value-1" => array_column($originalArray, "value-1"), "value-2" => array_column($originalArray, "value-2") ]; print_r($result);
array_column专门用来从多维数组中提取指定键的所有值,代码量少,执行效率也高,但缺点是需要提前知道要处理的键名,没法动态适配未知的键。
方法三:用array_reduce函数(函数式风格,适合动态键名)
如果你喜欢函数式编程的写法,array_reduce也能实现这个需求,同样支持动态键名:
$originalArray = [ ["value-1" => "azerty", "value-2" => "azerty"], ["value-1" => "azerty", "value-2" => "azerty"] ]; $result = array_reduce($originalArray, function ($acc, $item) { foreach ($item as $key => $value) { $acc[$key][] = $value; } return $acc; }, []); print_r($result);
这里的$acc是累加器,每次迭代都会把当前元素的键值对合并到累加器里,最终得到我们想要的结构。这种写法比较简洁,也能处理动态键名,适合习惯函数式风格的开发者。
内容的提问来源于stack exchange,提问作者Noah LNT
相关产品推荐
相关产品推荐

