在php中对对象数组进行排序

时间:2012-10-16 10:13:23

标签: php

HI我想对一个对象数组进行排序,它是以数组的形式存在对象,每个对象都有键,值,我想根据值对对象进行排序,问题是值包含数字哪个中间有空格,有些也是空数字,所以我无法使用任何帮助对它进行排序。

这是一段代码片段

array(4) {
  [0]=>
  object(stdClass)#308 (2) {
    ["key"]=>
    string(2) "AF"
    ["value"]=>
    string(3) "093"
  }
  [1]=>
  object(stdClass)#306 (2) {
    ["key"]=>
    string(2) "AL"
    ["value"]=>
    string(3) "355"
  }
  [2]=>
  object(stdClass)#304 (2) {
    ["key"]=>
    string(2) "DZ"
    ["value"]=>
    string(3) "213"
  }
  [3]=>
  object(stdClass)#302 (2) {
    ["key"]=>
    string(2) "AS"
    ["value"]=>
    string(5) "1 684"
  }

}

我希望根据值对结果进行排序。

3 个答案:

答案 0 :(得分:1)

尝试以下(我假设您要忽略数字中的空格):

uasort($yourArray, function($a, $b)
    {
        $a->value = str_replace(' ', '', $a->value);
        $b->value = str_replace(' ', '', $b->value);
        return (int)$a->value - (int)$b->value;
    });

答案 1 :(得分:0)

您可以使用

usort($list, function ($a, $b) {
    $a = filter_var($a->value,FILTER_SANITIZE_NUMBER_INT);
    $b = filter_var($b->value,FILTER_SANITIZE_NUMBER_INT);
    return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);
});

答案 2 :(得分:-1)

当然你可以使用usort,你只需要在比较之前预先处理usort比较函数中的值。 我假设您要删除空格,将空数字视为零,并忽略前导零。假设你的自定义比较函数看起来像这样:

function my_sort($obja, $objb)
{
   $a = (int)(str_replace(" ", "", $obja->value));
   $b = (int)(str_replace(" ", "", $objb->value));
   if ($a == $b) return 0;
   return ($a > $b) ? -1 : 1;
}