【问题标题】:How to filter associative array by values and split into two variables?如何按值过滤关联数组并拆分为两个变量?
【发布时间】:2015-11-24 21:40:28
【问题描述】:

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

输入(来自数据库):

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

【问题讨论】:

  • @rjdown 我已经阅读了该内容,但无法正常工作。
  • 那么简单的循环怎么样?你能展示一下你的尝试吗?
  • @rjdown 我已经修改了我原来的帖子。这就是我一直在尝试的。
  • 改成$status_one[] = $row;

标签: php arrays projection higher-order-functions


【解决方案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);

【讨论】:

  • 只适用于$status_zero[] 而不是$status_zero[$key]
  • 你认为他到底是什么意思? [] 是正确的方法,正如您在 OP 的示例中看到的那样,数组被重新索引。
【解决方案2】:

如果您不喜欢 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 ?>

将各个数组分配给它们自己的变量。

【讨论】:

  • 这是一种更有趣的方式。
【解决方案3】:

希望这会有所帮助...我认为简单的方法总是最好的...

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
                )

        )

)

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 2020-09-19
    • 2015-09-23
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多