排序XML结果与PHP ussort + strcmp?(整数)


Sorting XML results with PHP usort + strcmp? (integers)

我试图通过比较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);