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

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

Вход (из БД):

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];
}
}

1

Решение

Ты рядом ..

$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);
1

Другие решения

Если вам не нравятся операторы 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 ?>

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

1

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

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
)

)

)
0