You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何简化按键分组子数组的代码?PHP是否有等效内置函数?

替代foreach循环实现分组的PHP内置函数方案

当然有替代的内置函数方案啦!不用写foreach循环也能搞定这个按pairType分组收集id的需求~

最直接的方法是使用PHP的array_reduce()函数,它可以遍历数组并累积出我们想要的结果:

$pairs = [['id' => 1, 'pairType' => 2], ['id' => 2, 'pairType' => 2], ['id' => 3,'pairType' => 3]];

// 用匿名函数实现分组
$tmp = array_reduce($pairs, function($carry, $item) {
    // 将当前元素的id追加到对应pairType的分组中
    $carry[$item['pairType']][] = $item['id'];
    // 返回累积的结果,供下一次循环使用
    return $carry;
}, []);

// 最终$tmp的结果就是:[2 => [1, 2], 3 => [3]]

如果你使用的是PHP 8.1及以上版本,还可以用更简洁的箭头函数写法,让代码更紧凑:

$tmp = array_reduce($pairs, fn($carry, $item) => ($carry[$item['pairType']][] = $item['id']) && $carry, []);

不过要注意,这种箭头函数的写法利用了逻辑与的短路特性,虽然代码短,但可读性会稍弱一些,你可以根据自己的习惯选择。

另外补充一下:PHP目前没有专门的array_group_by()内置函数(很多第三方框架会封装这个功能),但array_reduce()完全可以完美替代你原来的foreach循环逻辑,实现相同的效果。

内容的提问来源于stack exchange,提问作者XWizard

火山引擎 最新活动