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

发布于 2022-09-05 06:33:38 字数 799 浏览 15 评论 0

如何将如下数组

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、有没有系统函数?
谢谢诸位

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

也只是曾经 2022-09-12 06:33:38

参考: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"));
?>
静待花开 2022-09-12 06:33:38

使用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
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文