0

重複の可能性:
phpで多次元配列を並べ替えるにはどうすればよいですか

次の多次元配列があるとしましょう:

$fruits[] = array("name"=>"orange", "price"=>3, "code"=>"A45");
$fruits[] = array("name"=>"apple", "price"=>2, "code"=>"W71");
$fruits[] = array("name"=>"grape", "price"=>4, "code"=>"G11");

$fruits[]次に、この配列をそので並べ替えたいと思いましたprice
したがって、次のようになります

$fruits[] = array("name"=>"apple", "price"=>2, "code"=>"W71");
$fruits[] = array("name"=>"orange", "price"=>3, "code"=>"A45");
$fruits[] = array("name"=>"grape", "price"=>4, "code"=>"G11");

それから私はたくさんのウェブをサーフィンしました、そして最後に私は次のものを見つけましたphp manual(私は上の私の配列で変数名を調整しました):

// Obtain a list of columns
foreach ($fruits as $key => $value) {
    $name[$key]  = $value['name'];
    $price[$key] = $value['price'];
    $code[$key] = $value['code'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($price, SORT_ASC, $fruits);

はい、わかった!次に、$fruits[]配列はprice値によって適切にソートされます。
さて、ここに私の懸念のいくつかがあります:

  • 私が以前に学んだ限り、ソート機構を使用するために追加の/カスタマイズされたコードを追加/使用するべきではありません。(代わりに、純粋な組み込みメソッドを使用する必要があると思います。)
  • ここでは、事前にカスタムforeachループが内部にあるため、パフォーマンスに疑問があります。これにより、実際の巨大なアレイを使用しているときに速度が大幅に低下する可能性があります。(私が今持っているように)

だから今私が聞きたいのは:

  • PHPこのことを達成するための純粋な方法はありますか?
  • [または] PHPの純粋な組み込みの配列ソートメソッド(例:sort()、usort()、asort()、array_multisort)の一部から/ pickingを使用するだけで、この多次元配列ソートの問題を修正することはできません。 ()など)?
4

2 に答える 2

2
usort ($fruits, function($a, $b) { return $a['price'] > $b['price'] ? 1 : ($a['price'] == $b['price'] ? 0 : -1); });
于 2013-01-15T04:28:27.813 に答える
0

usortあなたが探しているもののように聞こえます:

<?
$fruits[] = array("name"=>"orange", "price"=>3, "code"=>"A45");
$fruits[] = array("name"=>"apple", "price"=>2, "code"=>"W71");
$fruits[] = array("name"=>"grape", "price"=>4, "code"=>"G11");
usort($fruits, function($a, $b){return $a['price'] - $b['price'];});
print_r($fruits);
?>

生成:

Array
(
    [0] => Array
        (
            [name] => apple
            [price] => 2
            [code] => W71
        )

    [1] => Array
        (
            [name] => orange
            [price] => 3
            [code] => A45
        )

    [2] => Array
        (
            [name] => grape
            [price] => 4
            [code] => G11
        )

)
于 2013-01-15T04:29:39.583 に答える