2

この多次元配列を評価で並べ替えようとしています。

Array
(
    [0] => Array
        (
            [id] => 4
            [image] => test-image.gif
            [name] => Mia Panton
            [description] => From Falkirk
Wearing: River Island
            [month] => 04-2012
            [rating] => 0.0000
            [votes] => 0
        )

    [1] => Array
        (
            [id] => 3
            [image] => test-image.gif
            [name] => Sam Jane Raggett
            [description] => From: Falkirk
Fav Shop: Republic
            [month] => 04-2012
            [rating] => 1.0000
            [votes] => 1
        )

    [2] => Array
        (
            [id] => 2
            [image] => test-image.gif
            [name] => Sasha Westbrooke
            [description] => From Falkirk
Wearing: River Island
            [month] => 04-2012
            [rating] => 4.0000
            [votes] => 2
        )

    [3] => Array
        (
            [id] => 1
            [image] => test-image.gif
            [name] => Max Rose-Collins
            [description] => From: London
Fav Shop: blah
            [month] => 04-2012
            [rating] => 3.3333
            [votes] => 6
        )

)

私はそうするためにこれを使用しています

function orderByRating($a, $b) {
    return $a['rating'] - $b['rating'];
}
usort($array, 'orderByRating');

しかし、ご覧のとおり、0が一番上にあり、次に1、次に4、次に3であるため、機能していないようです。数値が2倍であるという事実と関係があるかどうかはわかりません。

どんな助けでもいただければ幸いです。ありがとうございました

4

3 に答える 3

4

Googleの使用http://www.php.net/manual/en/function.uasort.php#100325(およびわずかに修正)

function sorting($a, $b)
{
    $d = $a['rating'] - $b['rating'];
    return $d < 0 ? -1 : ($d > 0 ? 1 : 0);
} 
于 2012-04-28T17:21:56.203 に答える
0

別のアプローチ:
Lohorisによる投稿(http://stackoverflow.com/a/2699110/1363184)

function aasort (&$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;
}

aasort($test,"rating");
于 2012-04-28T17:49:08.637 に答える
-1

abが0未満の場合は同等に扱われるため、abを返さないでください。

たとえば、このコードを見てください。

<?php
$array = array(1.0,2.9,3.5,4.3);
function orderByRating($a, $b) {
    return $a - $b;
}
function orderByRating2($a, $b) {
    if($a>$b)
        return 1;
    if($a<$b)
        return -0;
    return 0;
}
usort($array, 'orderByRating'); // 1,3.5,2.9,4.3
usort($array, 'orderByRating2'); //1,2.9,3.5,4.3

print_r($array);
于 2012-04-28T17:22:40.883 に答える