处理对象数组时如何避免循环中的array_merge
How to avoid array_merge in loops when dealing with array of objects
围绕'array_merge(...)' is used in a loop and is a resources greedy construction.
有很多讨论
对于简单的数组,有一个使用展开运算符的简单解决方案。例如
$arraysToMerge = [ [1, 2], [2, 3], [5,8] ];
$arraysMerged = array_merge([], ...$arraysToMerge);
但是,我的问题是在以下情况下我找不到避免它的方法:
假设您有一个用户列表,并且每次使用都有多个社交媒体帐户。
您将如何创建一个包含所有用户的所有社交媒体帐户的数组?
我找到的唯一解决方案是这样的:
$allSocialMediaAccounts= [];
foreach ($users as $user) {
$allSocialMediaAccounts= array_merge($accounts, $user['socialMediaAccounts']);
}
您可以使用 $users
上的 array_column() 函数获得 $arraysToMerge
,如下所示:
$arraysToMerge = array_column($users, 'socialMediaAccounts');
$arraysMerged = array_merge(...$arraysToMerge);
Matt建议不需要合并成一个空数组,所以我根据他的建议修改了代码。
围绕'array_merge(...)' is used in a loop and is a resources greedy construction.
对于简单的数组,有一个使用展开运算符的简单解决方案。例如
$arraysToMerge = [ [1, 2], [2, 3], [5,8] ];
$arraysMerged = array_merge([], ...$arraysToMerge);
但是,我的问题是在以下情况下我找不到避免它的方法:
假设您有一个用户列表,并且每次使用都有多个社交媒体帐户。
您将如何创建一个包含所有用户的所有社交媒体帐户的数组? 我找到的唯一解决方案是这样的:
$allSocialMediaAccounts= [];
foreach ($users as $user) {
$allSocialMediaAccounts= array_merge($accounts, $user['socialMediaAccounts']);
}
您可以使用 $users
上的 array_column() 函数获得 $arraysToMerge
,如下所示:
$arraysToMerge = array_column($users, 'socialMediaAccounts');
$arraysMerged = array_merge(...$arraysToMerge);
Matt建议不需要合并成一个空数组,所以我根据他的建议修改了代码。