Как фильтровать ассоциативный массив по значениям и разбивать на две переменные?

Я пытаюсь фильтровать ассоциативный массив, чтобы определенные значения внутри определенного ключа попадали в определенную переменную. Чтобы понять это, вот пример того, что я пытаюсь сделать:

Вход (из базы данных):

Array ( [0] => Array ( [id] => '12', [status] => '0' ) [1] => Array ( [id] => '13', [status] => '1' ) [2] => Array ( [id] => '14', [status] => '1' ) ) 

Вывод (в PHP):

 $status_one = Array ( [0] => Array ( [id] => '13', [status] => '1' ) [1] => Array ( [id] => '14', [status] => '1' ) ); $status_zero = Array ( [0] => Array ( [id] => '12', [status] => '0' ) ) 

Я знаю, что массивы не являются синтаксически правильными, но это идея. Я хочу разбить одну переменную массивов на две отдельные переменные на основе значения в определенном ключе.

Вот что я имею в виду. Я знаю, что это частично неправильно. Я тоже что-то пробовал с помощью array_filter.

 foreach ($status as $key => $row) { if($row['status'] == '1') { $status_one[] = $key[$row]; } if($row['status'] == '2') { $status_two[] = $key[$row]; } } 

Ты рядом.

 $status_one = array(); $status_zero = array(); foreach ($status as $key => $row) { if($row['status'] == '1') $status_one[$key] = $row; else $status_zero[$key] = $row; } var_dump($status_one, $status_zero); 

Если вам не нравятся инструкции if-else и предпочитаете более общий способ сортировки по статусу, например, если статус внезапно 2

 $input = array( array("id" => 1, "status" => 1), array("id" => 2, "status" => 1), array("id" => 3, "status" => 0), array("id" => 4, "status" => 2), array("id" => 5, "status" => 0) ); $arr = array(); foreach($input as $key => $item){ $arr[$item['status']][] = $item; } ksort($arr, SORT_NUMERIC); 

$ arr теперь будет многомерным массивом, отсортированным по статусу.

 <?php list($status_zero, $status_one, $status_two) = $arr ?> 

Чтобы назначить отдельные массивы своей собственной переменной.

надеюсь, это поможет … я думаю, что простой способ всегда лучший …

 function array_group(Array $array, $groupBy){ $grouped_array = []; for ($i=0; $i<count($array); $i++){ $key_name = $groupBy.'_'.$array[$i][$groupBy]; if (!array_key_exists($key_name, $grouped_array)){ $grouped_array[$key_name] = []; } $grouped_array[$key_name][] = $array[$i]; } return $grouped_array; } 

контрольная работа :

 $test_array = [["id" => 12, "status" => 0], ["id" => 13, "status" => 1], ["id" => 14, "status" => 1]]; print_r(array_group($test_array, 'status')); 

вывод:

 Array ( [status_0] => Array ( [0] => Array ( [id] => 12 [status] => 0 ) ) [status_1] => Array ( [0] => Array ( [id] => 13 [status] => 1 ) [1] => Array ( [id] => 14 [status] => 1 ) ) )