PHP。如何在多维数组中按标签对值进行分组?

我有一个二维数组,其中包含人名和语言标签。目标是按语言标签对所有名称进行分组


以下是此类数组的示例:


[

 ['name' => 'Ann', 'languages' => ['EN', 'FR']],

 ['name' => 'Bill', 'languages' => ['ES', 'CN']],

 ['name' => 'Jake', 'languages' => ['ES', 'FR']],

]

应将其转化为:


[

 'EN' => ['Ann'],

 'FR' => ['Ann', 'Jake'],

 'ES' => ['Bill', 'Jake'],

 'CN' => ['Bill']

]

这是我的按语言分组的代码。第一个问题是它添加了键 id。第二个我不确定php中是否有更好用的数组函数。


function groupByLang(array $array) {

    $result = [];

    foreach ($array as $person) {

        foreach ($person['languages'] as $lang) {

            $result[$lang][] = $person['name'];

        }

    }

    return $result;

}

这是结果


[

 'EN' => [0 => 'Ann'],

 'FR' => [0 => 'Ann', 1 => 'Jake'],

 'ES' => [0 => 'Bill', 1 => 'Jake'],

 'CN' => [0 => 'Bill']

]

谁能帮我修复我的代码吗?提前致谢。


UPD 我想我的代码正在正常工作。然而我对这个索引感到困惑... UPD 2 修复了一个项目拼写错误。


aluckdog
浏览 103回答 1
1回答

江户川乱折腾

您的代码或结果没有任何问题。PHP 中的数组总是有一个与之关联的键。由于您没有指定键,它将回退到默认索引(0、1、2...)。
打开App,查看更多内容
随时随地看视频慕课网APP