2011-01-16 16 views
0

私はすでに、PHPでusortとフォールバック関数を使って特定の値で配列をソートする方法を教えてくれました。PHPで2つの具体的な値で配列をソート

この特定の値が存在せず、2つの値を使用する必要がある場合はどうなりますか?例では値[4]と[5] ...のようになります。つまり、私はこれをやりたいと思います:すべてのオブジェクトを数値で数値化します。 fifht値を持つオブジェクトは空です(この例では ' - ')、それらを第4の値で順序付けします。

Array(

[0] => Array(
    [0] => links-patrocinados 
    [1] => adwords 
    [2] => 0,5 
    [3] => R$92,34 
    [4] => 823000 
    [5] => 49500 
) 
[1] => Array(
    [0] => adwords 
    [1] => google adwords como funciona 
    [2] => 0,38 
    [3] => R$0,20 
    [4] => 480 
    [5] => 480 
) 
[2] => Array(
    [0] => links-patrocinados 
    [1] => adword 
    [2] => 0,39 
    [3] => R$58,77 
    [4] => 49500 
    [5] => 2900 
) 
[3] => Array(
    [0] => agencia 
    [1] => agencias viagens espanholas 
    [2] => - 
    [3] => R$0,20 
    [4] => 58 
    [5] => - 
) 
[4] => Array(
    [0] => agencia 
    [1] => era agencia imobiliaria 
    [2] => - 
    [3] => R$0,20 
    [4] => 73 
    [5] => - 
) 

) 
+0

あなたは「[5]の値によって、この配列をソート」と言うとき、あなたは何を意味するのですか? –

+0

あなたの既存のコードは何ですか? – BoltClock

+0

あなたがリンクしたコードのように見えます。何が効いていないのですか?あなたのコードはどのように見えますか? – jasonbar

答えて

2
あなただけ一度に比較される2つの項目に存在する(またはしない)の値に応じて、ゼロ、負または正の数を返すために、コールバック関数を変更する必要があり

。両方の項目で単一の配列インデックスを比較するときと同じように、この特定のケースで

function callback($a, $b) { 
    // Both have [5] so sort by that 
    if ($a[5] !== '-' && $b[5] !== '-') 
     return $b[5] - $a[5]; 

    // Neither have [5] so sort by [4] 
    if ($a[5] === '-' && $b[5] === '-') 
     return $b[4] - $a[4]; 

    // One has a [5] value 
    if ($a[5] === '-') 
     return 1; 
    else 
     return -1; 
} 
uasort($array, 'callback'); 
print_r($array); 

、上記のコールバックのようなものに絞り込まことができます:

function callback($a, $b) { 
    // Neither have [5] so sort by [4] 
    if ($a[5] === '-' && $b[5] === '-') 
     return $b[4] - $a[4]; 

    // One, or both, has a [5] value 
    return $b[5] - $a[5]; 
} 
+0

ありがとう、Salathe、それはうまく働いた。あなたの小さなコードのおめでとう。 – Roger

5
// $myArray = your array of associative arrays, above 
function compare($x, $y) 
{ 
    if ($x[5] == $y[5]) { 
     return 0; 
    } 
    else if ($x[5] < $y[5]) { 
     return -1; 
    } 
    else { 
     return 1; 
    } 
} 

usort($myArray, 'compare'); 
+2

'usort($ myArray、function($ x、$ y){return $ x [5] - $ y [5];}); ' – BoltClock

+0

@BoltClock - 素晴らしい!これはPHP 5.3+のみです。 –

+1

そうでなければ、 'function compare($ x、$ y){return $ x [5] - $ y [5]; } ' – BoltClock

関連する問題