我试图通过比较XML对象中一个字段的数值来排序页面上AJAX调用的结果。基本上,这是一个产品受欢迎程度排名,数字越高,越受欢迎。
我几乎让它工作了,除了strcmp
只比较第一位数字,所以顺序目前是这样的:1、12、15、19、2、21、24、3、34、36、39、5、52、56
我如何修改这段代码,使数字从低到高的顺序,而不管有多少位数字?
$products = array();
foreach($xml->Products as $product) {
$products[] = $product;
};
// Sort results based on popularity
usort ($products, function($a, $b) {
return strcmp($a->ProductPopularity, $b->ProductPopularity);
});
谢谢!
转换为整数并进行正常比较。
usort($myArray, function($a, $b) {
if((int)$a->ProductPopularity==(int)$b->ProductPopularity) return 0;
return (int)$a->ProductPopularity < (int)$b->ProductPopularity?1:-1;
});
试试这个:
usort ($products, function($a, $b) {
return (int)($a->ProductPopularity) - (int)($b->ProductPopularity));
});
或者你可以交换a和b如果你想反转排序
$arr2 = array();
foreach ($arr as $i => $row) {
$arr2[$row['fieldname']] = $row;
}
ksort($arr2);
$arr2 = array_values($arr2);