The sergeant approach is the simplest. Just for the sake of this, here is the approach with array_filter() (just in case, you should have an unfiltered array):
$array = []; $categories = array("A","B","C","D"); while ($row = mysqli_fetch_array($result)) { $item = [ 'category' => $row['category'], 'surname' => $row['Surname'] ]; $array[] = $item; } $categorized = []; foreach ($categories as $category) { $categorized[$category] = array_filter($array, function($item) use ($category) { return $item['category'] == $category; }); }
Here is a proof of concept without having to connect to a database:
$categories = array("A","B","C","D"); $array = [ ['category' => 'A', 'Surname' => 'A Name 1'], ['category' => 'A', 'Surname' => 'A Name 2'], ['category' => 'B', 'Surname' => 'B Name 1'], ['category' => 'B', 'Surname' => 'B Name 2'], ['category' => 'B', 'Surname' => 'B Name 3'], ['category' => 'C', 'Surname' => 'C Name'], ]; $categorized = []; foreach ($categories as $category) { $categorized[$category] = array_filter($array, function($item) use ($category) { return $item['category'] == $category; }); } print_r($categorized);
Output:
Array ( [A] => Array ( [0] => Array ( [category] => A [Surname] => A Name 1 ) [1] => Array ( [category] => A [Surname] => A Name 2 ) ) [B] => Array ( [2] => Array ( [category] => B [Surname] => B Name 1 ) [3] => Array ( [category] => B [Surname] => B Name 2 ) [4] => Array ( [category] => B [Surname] => B Name 3 ) ) [C] => Array ( [5] => Array ( [category] => C [Surname] => C Name ) ) [D] => Array ( ) )
jeromegamez
source share