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"
}
}
我希望根据值对结果进行排序。
答案 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;
}