唯一的2D数组,但检查PHP中的列值

时间:2015-03-04 10:08:39

标签: php arrays

Array ([0] => Array
        (
            [id] => 1
            [name] => A
            [dept] => 0
         )
       [1]=>Array
        (   [id] => 2
            [name] => B
            [dept] => 0
          )
       [2]=>Array
        (   [id] => 1
            [name] => A
            [dept] => 1
          )
)                               

应用后,唯一数组函数应检查重复值为id并检查dept> 0是否保留,否则删除dept = 0的重复数组

在上面的例子中结果Array [1]和Array [2]

$final = array_values(array_combine(array_column($2DArray, 'id'), $2DArray));

上面的函数给了我唯一的数组,但我想检查列值dept> 0。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

$output =array_values( array_reduce
                (
                    $2DArray,
                    function (array $carry, array $item) {

                        $key = $item['id'];

                        if (! isset($carry[$key])) {
                            $carry[$key] = $item;
                            return $carry;
                        }

                        $old = $carry[$key];
                        if ($old['dept'] < $item['dept']) {

                            $carry[$key] = $item;
                        }


                        return $carry;
                    },
                    array()
                ));
print_r($output);

答案 1 :(得分:0)

您可以按dept对其进行排序,然后过滤:

array_multisort(array_column($array, 'dept'), SORT_DESC, $array);

$final = array_filter($array, function($v) {
                                    static $ids = array();

                                    if(in_array($v['id'], $ids)) {
                                        return false;
                                    } else {
                                        $ids[] = $v['id'];
                                        return true;
                                    }
                               });

而且,您应该知道$2DArray不是有效的变量名。