5

私は配列を持っています:

$example = array();

$example ['one']   = array('first' => 'blue',
                           'second' => 'red');

$example ['two']   = array('third' => 'purple',
                           'fourth' => 'green');

$example ['three'] = array('fifth' => 'orange',
                           'sixth' => 'white');

関数への入力に基づいて、foreachループが出力を処理する前に、サンプル配列の順序を変更する必要があります。

switch($type)

case 'a':
//arrange the example array as one, two three
break;

case 'b':
//arrange the example array as two, one, three
break;

case 'c':
//arrange the example array in some other arbitrary manner
break;

foreach($example as $value){
        echo $value;
}

すべてのコードをリエンジニアリングせずにこれを行う簡単な方法はありますか?私は処理を行うかなり詳細なforeachループを持っており、毎回配列を単純に並べ替える簡単な方法があれば、それは本当に役に立ちます。

4

4 に答える 4

2

ここで特効薬の答えを見つけるつもりはありません。おそらく、で使用する独自の関数を作成する必要がありますuksort()

uksort($example, function ($a, $b) use $type {
    switch($type) {
        case 'a':
            if ($a === 'one' || $b === 'three') return 1;
            if ($a === 'three' || $b === 'one') return -1;
            if ($a === 'two' && $b === 'three') return 1;
            return -1;
            break;
        // and so on...
    }
});
于 2013-02-26T21:24:02.493 に答える
2

array_multisort順列に使用できます。私はあなたが順列を知っていて、キー名からそれを導き出す必要はないと思います。たとえば、順序が必要な場合は、次のような参照配列two, three, oneを作成します。

$permutation = array(3, 1, 2);

意味:最初のアイテムは位置3に移動し、2番目のアイテムは位置1に移動し、3番目のアイテムは位置2に移動します

次に、後switch、順列:

array_multisort($permutation, $example);

これにより、$permutation配列が並べ替えられ、同じ順序がに適用され$exampleます。

于 2013-02-26T22:27:56.820 に答える
0

私はこれを解決するためのより多くの方法を見ていますが、私は何がより良いかわかりません。

  1. 事前スコアを作成し(「かなり詳細なforeachループ」で計算された各要素の数値を作成します)、それを主要な単一の基準として使用して配列を並べ替えます。

  2. 基準が数値フィールドのみに基づいている場合、ASC/DESCはhttp://php.net/manual/en/function.array-multisort.phpを使用します

  3. ケースごとにカスタムの並べ替え関数を作成します(http://www.php.net/manual/en/function.usort.php

于 2013-02-26T21:42:58.800 に答える
0

ケースごとにカスタムの並べ替え関数を作成してから、usortを使用する必要があります。最初のケースでは、sortを使用できます。任意のソートは、定義するロジックである必要があります。

于 2013-02-26T21:19:22.967 に答える