如何按值过滤关联数组并拆分为两个变量?

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

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

输入(来自数据库):

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
                )

        )

)