PHP中是否存在类似array_column的多维数组处理函数?
PHP多维数组分组转换方案
嘿,这个问题我太熟悉了!首先明确说:PHP本身没有直接内置一个和array_column功能完全对应、专门用来做这种分组转换的函数,但我们可以用简单的循环或者数组函数轻松实现你要的效果。
先确认一下你想要的转换结果——你没写完第二个数组,应该是把相同foodType的条目归到对应键名下面,结构大概是这样对吧?
Array ( [fruits] => Array ( [0] => Array ( [itemID] => 1 [itemName] => apple ), [1] => Array ( [itemID] => 2 [itemName] => banana ) ), [veggies] => Array ( [0] => Array ( [itemID] => 3 [itemName] => carrot ), [1] => Array ( [itemID] => 4 [itemName] => broccoli ) ) )
下面给你两种常用的实现方式:
1. foreach循环(直观易懂,新手友好)
这是最直白的写法,逻辑清晰,调试起来也方便:
// 你的原始数组 $originalArray = [ ['foodType' => 'fruits', 'itemID' => 1, 'itemName' => 'apple'], ['foodType' => 'fruits', 'itemID' => 2, 'itemName' => 'banana'], ['foodType' => 'veggies', 'itemID' => 3, 'itemName' => 'carrot'], ['foodType' => 'veggies', 'itemID' => 4, 'itemName' => 'broccoli'], ]; $groupedArray = []; foreach ($originalArray as $item) { // 取出分组键 $type = $item['foodType']; // 移除不需要的foodType字段 unset($item['foodType']); // 如果该分组还不存在,先初始化空数组 if (!isset($groupedArray[$type])) { $groupedArray[$type] = []; } // 将当前条目加入对应分组 $groupedArray[$type][] = $item; } // 输出结果 print_r($groupedArray);
2. array_reduce函数(函数式写法,更简洁)
如果你喜欢函数式编程的风格,用array_reduce可以轻松搞定:
$groupedArray = array_reduce($originalArray, function($carry, $item) { $type = $item['foodType']; unset($item['foodType']); // 直接将条目追加到对应分组,PHP会自动初始化数组 $carry[$type][] = $item; return $carry; }, []); print_r($groupedArray);
如果你的PHP版本在7.4及以上,还可以用短箭头函数让代码更紧凑:
$groupedArray = array_reduce($originalArray, fn($carry, $item) => ($carry[$item['foodType']][] = tap($item, fn(&$i) => unset($i['foodType']))) && $carry, [] );
不过这种写法可读性稍差,日常开发还是前两种更实用。
总的来说,虽然没有专门的内置函数一步到位,但用上面的方法都能高效完成你要的多维数组转换需求~
内容的提问来源于stack exchange,提问作者jcropp
相关产品推荐
相关产品推荐

