0

私はこのような配列の配列を持っています:

Array(
    [id1] => Array (
           /* details */
           [unique] => 3
          )
    [id2] => Array (
           /* details */
           [unique] => 5
    [id3] => Array (
           /* details */
           [unique] => 1
    )
)

質問 :unique次のように変換されるように、フィールドで並べ替えるにはどうすればよいですか?

Array(
    [id2] => Array (
           /* details */
           [unique] => 5
          )
    [id1] => Array (
           /* details */
           [unique] => 3
    [id3] => Array (
           /* details */
           [unique] => 1
    )
)
4

4 に答える 4

4

usort 関数の古典的なタスク:

<?php
$data = array(
    "id1" => Array (
        "unique" => 3
        ),
    "id2" => Array (
        "unique" => 5),
    "id3" => Array (
        "unique" => 1
        ),
    );

function cmp($a, $b)
// {{{
{
    if ($a["unique"] == $b["unique"]) {
        return 0;
    }
    return ($a["unique"] < $b["unique"]) ? 1 : -1;
}
// }}}

usort($data, "cmp");
var_dump($data);

版画:

array(3) {
  [0]=>
  array(1) {
    ["unique"]=>
    int(5)
  }
  [1]=>
  array(1) {
    ["unique"]=>
    int(3)
  }
  [2]=>
  array(1) {
    ["unique"]=>
    int(1)
  }
}

http://www.php.net/manual/en/function.usort.php

于 2013-07-26T06:31:09.060 に答える
0

を使用してusort()

$array = array(
    "id1" => array("unique" => 3),
    "id2" => array("unique" => 5),
    "id3" => array("unique" => 1),
);

usort($array, function ($a, $b){
    if ($a['unique'] == $b) {
        return 0;
    }
    return ($a['unique'] > $b['unique']) ? -1 : 1;
});

print_r($array);

出力:

Array
(
    [0] => Array
        (
            [unique] => 5
        )
    [1] => Array
        (
            [unique] => 3
        )
    [2] => Array
        (
            [unique] => 1
        )
)
于 2013-07-26T06:33:01.097 に答える
0

私のカスタム関数を使用すると、配列をソートできます

function multisort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

multisort ($your_array,"order");
于 2013-07-26T06:31:29.743 に答える