如何按值筛选关联数组并将其拆分为两个变量


How to filter associative array by values and split into two variables?

我正在尝试过滤一个关联数组,以便特定键中的某些值进入特定变量。为了理解这一点,这里有一个我试图做的例子:

输入(来自DB):

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
                )
        )
)