处理对象数组时如何避免循环中的 array_merge

Jak*_*ttk 4 php arrays array-merge

周围有很多讨论'array_merge(...)' is used in a loop and is a resources greedy construction.

对于简单数组,有一个使用扩展运算符的简单解决方案。例如

$arraysToMerge = [ [1, 2], [2, 3], [5,8] ];
$arraysMerged = array_merge([], ...$arraysToMerge);
Run Code Online (Sandbox Code Playgroud)

但是,我的问题是,在以下情况下我找不到避免这种情况的方法:

假设您有一个用户列表,并且每个用户都有多个社交媒体帐户。

您将如何创建一个包含所有用户的所有社交媒体帐户的数组?我发现的唯一解决方案是这样的:

$allSocialMediaAccounts= [];
foreach ($users as $user) {
    $allSocialMediaAccounts= array_merge($accounts, $user['socialMediaAccounts']);
}
Run Code Online (Sandbox Code Playgroud)

KIK*_*are 5

您可以像这样$arraysToMerge使用array_column()函数$users

$arraysToMerge = array_column($users, 'socialMediaAccounts');
$arraysMerged  = array_merge(...$arraysToMerge);
Run Code Online (Sandbox Code Playgroud)

马特建议您不需要合并到空数组中,因此我根据他的建议调整了代码。

  • @Matt 我相信 array_merge(...$arraysToMerge) 仅适用于 PHP 7.4+。对于旧版本,您需要 `array_merge([], ...$arraysToMerge)` 否则,如果 `arraysToMerge` 是空数组或不可遍历,您可能会收到警告 (2认同)