Имеется массив PHP: $arr = [ ['id' => 1, 'title' => 'aa1', 'category_id' => 1], ['id' => 2, 'title' => 'aa2', 'category_id' => 1], ['id' => 3, 'title' => 'aa3', 'category_id' => 1], ['id' => 4, 'title' => 'aa4', 'category_id' => 2], ['id' => 5, 'title' => 'aa5', 'category_id' => 2], ['id' => 6, 'title' => 'aa6', 'category_id' => 3], ['id' => 7, 'title' => 'aa7', 'category_id' => 3], ['id' => 8, 'title' => 'aa8', 'category_id' => 3], ['id' => 9, 'title' => 'aa9', 'category_id' => 3], ]; Нужно разбить его на группы по категориям, что бы получился такой PHP: $arr2 = [ ['category_id1' => [ ['id' => 1, 'title' => 'aa1', 'category_id' => 1], ['id' => 2, 'title' => 'aa2', 'category_id' => 1], ['id' => 3, 'title' => 'aa3', 'category_id' => 1], ] ], ['category_id2' => [ ['id' => 4, 'title' => 'aa4', 'category_id' => 2], ['id' => 5, 'title' => 'aa5', 'category_id' => 2], ] ], ['category_id3' => [ ['id' => 6, 'title' => 'aa6', 'category_id' => 3], ['id' => 7, 'title' => 'aa7', 'category_id' => 3], ['id' => 8, 'title' => 'aa8', 'category_id' => 3], ['id' => 9, 'title' => 'aa9', 'category_id' => 3], ] ], ]; Я это сделал таким способом PHP: $newArr = []; $key; foreach($arr as $val){ $key = $val['category_id']; if(!array_key_exists($key, $newArr)){ $newArr[$key] = [$val]; } else if(array_key_exists($key, $newArr)){ array_push($newArr[$key], $val); } } Есть ли какая-нибудь готовая функция?
PHP: <?php function fetch_group_all( array $array, string $column ): iterable { $all = []; foreach ( $array AS $row ) { $all[ ( isset ( $row[$column] ) || array_key_exists ( $column, $row ) ? $row[$column] : reset ( $row ) ) ][] = $row; } return $all; } $arr = [ ['id' => 1, 'title' => 'aa1', 'category_id' => 1], ['id' => 2, 'title' => 'aa2', 'category_id' => 1], ['id' => 3, 'title' => 'aa3', 'category_id' => 1], ['id' => 4, 'title' => 'aa4', 'category_id' => 2], ['id' => 5, 'title' => 'aa5', 'category_id' => 2], ['id' => 6, 'title' => 'aa6', 'category_id' => 3], ['id' => 7, 'title' => 'aa7', 'category_id' => 3], ['id' => 8, 'title' => 'aa8', 'category_id' => 3], ['id' => 9, 'title' => 'aa9', 'category_id' => 3], ]; print_r ( fetch_group_all( $arr, 'category_id' ) ); PHP: Array ( [1] => Array ( [0] => Array ( [id] => 1 [title] => aa1 [category_id] => 1 ) [1] => Array ( [id] => 2 [title] => aa2 [category_id] => 1 ) [2] => Array ( [id] => 3 [title] => aa3 [category_id] => 1 ) ) [2] => Array ( [0] => Array ( [id] => 4 [title] => aa4 [category_id] => 2 ) [1] => Array ( [id] => 5 [title] => aa5 [category_id] => 2 ) ) [3] => Array ( [0] => Array ( [id] => 6 [title] => aa6 [category_id] => 3 ) [1] => Array ( [id] => 7 [title] => aa7 [category_id] => 3 ) [2] => Array ( [id] => 8 [title] => aa8 [category_id] => 3 ) [3] => Array ( [id] => 9 [title] => aa9 [category_id] => 3 ) ) )
GPTChat мне такое выдал и это работает. PHP: $grouped = []; foreach ($arr as $item) { $grouped[$item['category_id']][] = $item; }