使用PHP usort + strcmp对XML结果进行排序? (整数)

时间:2014-07-08 21:36:27

标签: php strcmp usort

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

谢谢!

3 个答案:

答案 0 :(得分:0)

按整数投射并进行正常比较。

 usort($myArray, function($a, $b) {
      if((int)$a->ProductPopularity==(int)$b->ProductPopularity) return 0;
      return (int)$a->ProductPopularity < (int)$b->ProductPopularity?1:-1;
 });

答案 1 :(得分:0)

试试这个:

usort ($products, function($a, $b) {
    return (int)($a->ProductPopularity) - (int)($b->ProductPopularity));
});

或者如果你想反转排序,你可以交换a和b。

答案 2 :(得分:0)

$arr2 = array();
foreach ($arr as $i => $row) {
    $arr2[$row['fieldname']] = $row;
}
ksort($arr2);
$arr2 = array_values($arr2);