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 に答える