0

重複の可能性:
PHPで多次元配列をソートするにはどうすればよいですか

Array ( [0] => Array ( 
                    [card_name] => CardA 
                    [str] => 10 
                    [def] => 10 
                    [desc] => - Recover 150 points of vitality 
                              - Attack twice" 
                    [qty] => 5 
                ) 
    [1] => Array ( 
                    [card_name] => CardD 
                    [str] => 40 
                    [def] => 40 
                    [desc] => - Investigate enemy's weakpoint 
                    [qty] => 3 
                ) 
    [2] => Array ( [card_name] => CardG 
                   [str] => 35 
                   [def] => 20 
                   [desc] => 
                   [qty] => 1 
                ) 
    [3] => Array ( 
                   [card_name] => CardH 
                   [str] => 25 
                   [def] => 30 
                   [desc] => 
                   [qty] => 1 
                ) 
    [4] => Array ( 
                   [card_name] => CardI 
                   [str] => 15 
                   [def] => 40 
                   [desc] => - Enhance strength 
                   [qty] => 1 
                ) 
    [5] => Array ( 
                   [card_name] => CardJ 
                   [str] => 5 
                   [def] => 50 
                   [desc] => - Make silence 
                   [qty] => 3 
                   ) 
    )

配列の並べ替えについて簡単な質問があります。ascまたはdescのstrまたはdefで配列をソートしたいだけです。php.net の例は少しわかりにくいので、誰かこの小さなジレンマを解決できるかどうか疑問に思っていました。

これにはarray_multi_sortを使用する必要があることを知っています。

ありがとう。

4

4 に答える 4

0

php usort を試す - http://www.php.net/manual/en/function.usort.php

コードを試して実行したことはありませんが、以下のようになります。

function cmp($a, $b)
{
   return strcmp($a['def'],$b['def']) 
}

$a = yourArray[];

usort($a, "cmp");

これは、各要素を反復処理し、配列要素をパラメーターとして渡し、カスタム関数を使用して並べ替えます。

于 2012-09-08T20:49:06.307 に答える
0

usort 関数を使用します。あなたの場合は次のようになります:

function compare($valueA, $valueB) {
    if ($valueA['str'] > $valueb['str']) {
        return 1;
    } else if ($valueA['str'] < $valueb['str']) {
        return -1;
    }
    return 0;
}

usort($yourArray, "compare");
于 2012-09-08T20:53:26.560 に答える
0

usort()strnatcmp()が解決策です:

<?php
    function build_sorter($key) {
        return function ($a, $b) use ($key) {
            return strnatcmp($a[$key], $b[$key]);
        };
    }

    usort($array, build_sorter('def'));
    print_r($array);
?>

定義したキーですべての配列をソートします。

于 2012-09-08T20:53:36.257 に答える
0

配列マルチソートでは、元の配列と同じ最初の次元のキーを使用して、ソートするキーの値を保持する配列を作成する必要があります。

したがって、キー 0 と 1 の str または def の値である 0 => 10、1 => 5... などを保持する配列を作成すると、次のことができます。

foreach($originalArray as $key => $record) {
    $keyValuesArray[$key] = $record['str'];
}

array_multisort($keyvaluesArray, SORT_ASC, $originalArray);

元の配列はソートされるように変更されます。

あなたがすべきことについては、配列マルチソートが「その方法」であるとは思いませんが、それはひどい方法ではありません。他のソリューションの方がわずかに効率的かもしれません。

于 2012-09-08T20:57:36.680 に答える