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