Я пытаюсь фильтровать ассоциативный массив, чтобы определенные значения внутри определенного ключа попадали в определенную переменную. Чтобы понять это, вот пример того, что я пытаюсь сделать:
Вход (из базы данных):
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 ) ) )