我有一個二維數組$artists = [ ["name" => "Post Malone", "song" => "Circles", "genre" => "Pop"], ["name" => "Camila Cabello", "song" => "Liar", "genre" => "Pop"], ["name" => "Tones and I", "song" => "Dance Monkey", "genre" => "Alternative"], ["name" => "Billie Eilish", "song" => "Bad Guy", "genre" => "Alternative"],];我正在嘗試編寫一個按流派組織數組并按流派對不同藝術家進行分組的函數。我的輸出應該是這樣的:array ( 'Pop' => array ( 0 => 'Post Malone', 1 => 'Camila Cabello', ), 'Alternative' => array ( 0 => 'Tones and I', 1 => 'Billie Eilish', ),)我試圖先構建外部數組function organizer($artists) { $genre = array(); for ($i = 0; $i < count($artists); $i++) { $outterArr = array_push ($artists[$i]["genre"],$genre); return $outterArr; }}但堅持如何在外部數組內構造一個新數組。我對編程和 php 很陌生。請展示我的技能,謝謝!
2 回答

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
您可以使用array_reduce按流派對條目進行分組:
$artistsByGenre = array_reduce($artists, static function ($byGenre, $artist) {
$byGenre[$artist['genre']][] = $artist['name'];
return $byGenre;
}, []);
演示:https ://3v4l.org/3fU83

白板的微信
TA貢獻1883條經驗 獲得超3個贊
function group_by($key, $data) {
$result = array();
foreach($array as $val) {
if(array_key_exists($key, $val)){
$result[$val[$key]][] = $val;
}else{
$result[""][] = $val;
}
}
return $result; }
$genres = group_by("genre", $artists);
- 2 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消