0

嗨,我想对一个对象数组进行排序,它是数组的形式,其中包含对象,每个对象都有键、值,我想根据值对对象进行排序,问题是值包含其中有空格的数字之间,有些也是空数字,所以我无法使用 usort 对其进行排序,任何帮助将不胜感激。

这是一个代码片段

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"
  }

}

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

4

3 回答 3

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;
    });
于 2012-10-16T10:18:29.837 回答
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);
});
于 2012-10-16T10:18:06.680 回答
-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;
}
于 2012-10-16T10:21:06.027 回答