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
)
)