PHP将二维数组根据某字段分组

如何将如下数组

array(3) {
  [0]=>
  array(5) {
    ["id"]=>
    string(1) "1"
    ["uid"]=>
    string(1) "1"
    ["type"]=>
    string(1) "3"
    ["cid"]=>
    string(1) "1"
    ["collection_time"]=>
    string(10) "1500978684"
  }
  [1]=>
  array(5) {
    ["id"]=>
    string(1) "2"
    ["uid"]=>
    string(1) "1"
    ["type"]=>
    string(1) "1"
    ["cid"]=>
    string(1) "1"
    ["collection_time"]=>
    string(10) "1500978696"
  }
  [2]=>
  array(5) {
    ["id"]=>
    string(1) "3"
    ["uid"]=>
    string(1) "1"
    ["type"]=>
    string(1) "1"
    ["cid"]=>
    string(1) "2"
    ["collection_time"]=>
    string(10) "1500980221"
  }
}

按type字段分组,即$arr[1],$arr[2]组成一个数组
不想用foreach、有没有系统函数?
谢谢诸位

阅读 12.4k
2 个回答

参考:array_filter

官方example已经给出了详细的示例,传入一个function用于过滤,函数return true则表示通过过滤器,return false则不通过:

<?php
function odd($var)
{
    // returns whether the input integer is odd
    return($var & 1);
}

function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>

使用array_filter过滤
正如官方的例子:http://php.net/manual/zh/func...

数组的键名保留不变
所以要针对下标做操作前一定要重新 array_values 一下

$arr = [
    ['id'=>1,'type'=>1],
    ['id'=>2,'type'=>2],
    ['id'=>3,'type'=>2],
    ['id'=>4,'type'=>1],
];

$res['type2'] = array_filter($arr, function ($val) {
    return $val['type'] == 2;
});
$res['not2'] = array_filter($arr, function ($val) {
    return $val['type'] != 2;
});

header('Content-Type:application/json; charset=utf-8');
exit(json_encode($res));

结果是

{
    "type2": {
        "1": {
            "id": 2,
            "type": 2
        },
        "2": {
            "id": 3,
            "type": 2
        }
    },
    "not2": {
        "0": {
            "id": 1,
            "type": 1
        },
        "3": {
            "id": 4,
            "type": 1
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题