php按列名对多维数组排序

php按列名对多维数组排序,php,arrays,sorting,Php,Arrays,Sorting,如何按总数对该数组进行排序?此外,我还尝试获取字段总数,但失败了 data = [{id: 1, total: 400},{id: 2, total: 100},{id: 3, total: 500},{id: 4, total: 10}] 我犯了这个错误 无法将stdClass类型的对象用作数组 必需:按total属性对对象数组进行排序 代码: 尝试使用usort:如果您仍然使用PHP5.2或更早版本,则必须首先定义排序函数: $json = '[{"id": 1, "total": 400

如何按总数对该数组进行排序?此外,我还尝试获取字段总数,但失败了

data = [{id: 1, total: 400},{id: 2, total: 100},{id: 3, total: 500},{id: 4, total: 10}]
我犯了这个错误

无法将stdClass类型的对象用作数组


必需:按
total
属性对对象数组进行排序

代码:
尝试使用
usort
:如果您仍然使用PHP5.2或更早版本,则必须首先定义排序函数:

$json = '[{"id": 1, "total": 400}, {"id": 2, "total": 100}, {"id": 3, "total": 500}, {"id": 4, "total": 10}]';

    $myArray = json_decode($json, true);
    function sortByOrder($a, $b)
    {
        return $a['total'] - $b['total'];
    }

    usort($myArray, 'sortByOrder');
    print_r($myArray);
从PHP 5.3开始,您可以使用匿名函数:

usort($myArray, function ($a, $b) {
    return $a['total'] - $b['total'];
});
最后,使用PHP7,您可以使用“spaceship操作符”:


我可以帮你。你为什么不在你的查询中这样做?@Monty,我已经这样做了,但是我正在合并两个数组,所以最后的数组没有排序。用示例数据显示查询我将优化数据。。我使用的是Laravel4.2,如何将数组从[{id:1,total:100}]转换为[{id:1,total:100}]?@kerwin,你是如何生成这个字符串的?你转换成那样的数据是从哪里来的?在PHP中,生成
JSON
字符串的常用方法是使用
JSON\u encode($phpDataItem)
其中
dataItem
是一个PHP数组,等等。我使用laravel查询生成了数据。这是我的代码和解释@Kerwin,好的,我们可以从这里开始做各种各样的工作1)让SQL做更多的工作,帮助您以正确的顺序获取所需的数据。2) 我假设
$val
保存您想要排序的数组。如果您
var\u dump($val)您应该了解如何对其进行排序。或者,考虑到您已经创建的查询。它们可以与
联合
组合,而
总和
分组
组合。同时应用一个
order by
,它应该以您想要的方式返回数组。
Array
(
    [0] => stdClass Object
        (
            [id] => 4
            [total] => 10
        )

    [1] => stdClass Object
        (
            [id] => 2
            [total] => 100
        )

    [2] => stdClass Object
        (
            [id] => 1
            [total] => 400
        )

    [3] => stdClass Object
        (
            [id] => 3
            [total] => 500
        )
)
$json = '[{"id": 1, "total": 400}, {"id": 2, "total": 100}, {"id": 3, "total": 500}, {"id": 4, "total": 10}]';

    $myArray = json_decode($json, true);
    function sortByOrder($a, $b)
    {
        return $a['total'] - $b['total'];
    }

    usort($myArray, 'sortByOrder');
    print_r($myArray);
usort($myArray, function ($a, $b) {
    return $a['total'] - $b['total'];
});
usort($myArray, function ($a, $b) {
        return $a['type'] <=> $b['type'];
});
Array
(
    [0] => Array
        (
            [id] => 4
            [total] => 10
        )

    [1] => Array
        (
            [id] => 2
            [total] => 100
        )

    [2] => Array
        (
            [id] => 1
            [total] => 400
        )

    [3] => Array
        (
            [id] => 3
            [total] => 500
        )

)