You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:22:39