PHP如何将一维数组元素嵌套为层级子数组?前元素为后元素父级
解决一维数组转嵌套关联数组的问题
我来帮你搞定这个数组嵌套的需求~你想要把一维数组['Image','Thumbnail','size']转换成逐层嵌套的关联数组['Image'=>['Thumbnail'=>['size'=>'test']]],之前的代码之所以没得到预期结果,是因为每次循环都直接生成了新的平级键值对,没有把已经嵌套好的结构作为父级键的值。
方法一:反向循环构建嵌套结构
我们可以从数组的最后一个元素开始,逐步向外层包裹,每次把当前的嵌套结果作为上一个键的值:
$data = ['Image', 'Thumbnail', 'size']; $finalValue = 'test'; // 先初始化最内层的键值对 $result = [$data[count($data) - 1] => $finalValue]; // 从倒数第二个元素开始向前遍历,逐层包裹 for ($i = count($data) - 2; $i >= 0; $i--) { $result = [$data[$i] => $result]; } print_r($result);
执行这段代码后,输出结果就是你想要的:
Array ( [Image] => Array ( [Thumbnail] => Array ( [size] => test ) ) )
方法二:用array_reduce简化实现
如果你喜欢更简洁的写法,可以用array_reduce结合数组反转来实现:
$data = ['Image', 'Thumbnail', 'size']; $finalValue = 'test'; $result = array_reduce( array_reverse($data), function($carry, $item) { return [$item => $carry]; }, $finalValue ); print_r($result);
这个方法的逻辑和循环方式一致:先把数组反转,然后从最终值test开始,每次将当前元素作为键,把之前的结果作为值,逐步构建出嵌套结构,输出结果和上面完全相同。
内容的提问来源于stack exchange,提问作者Sujith Johnson
相关产品推荐
相关产品推荐

