2012-01-19 10 views
9

私は製品の配列を持っていますので、別の配列で並べ替える必要があります。別の配列を使用して配列を並べ替える

$products = array(
    0 => 'Pro 1', 
    1 => 'Pro 2', 
    2 => 'Pro 3' 
); 

$sort = array(1,2,0); 

array_multisort($products, $sort); 

アレイ今...

$products = array(
    0 => 'Pro 2', 
    1 => 'Pro 3', 
    2 => 'Pro 1' 
); 

私が正しくarray_multisort使用していないようですしなければなりません。 Iveは2時間かけて別の方法を試しました...

+1

要素インデックスは常に '$ sort'配列の数字と一致しますか? –

+0

私は 'array(1,2,0)'で '3,1,2'と思っています。' 2,3,1'を使うときは 'array(2,0,1)'を使うべきです。 – Vyktor

+1

Vyktor 'array_multisort($ sort、$ products)'を使いたいのであれば、配列は '[2,0,1]'にする必要があります。 「$ products」の最初の要素を@ index 2に、2番目の要素をインデックス0に、3番目の要素をインデックス1にしたいと考えています。あなたの現在の配列では、与えられた答えとして、何らかの形の繰り返し(つまり、 'array_map')を使うだけです。 – Matthew

答えて

9

を使用することができます。

$products = array_map(function($i) use ($products) { 
    return $products[$i]; 
}, $sort); 
+0

実際に、これを書く別の方法がありますか? Dreamweaverは無効なPHP – tuurbo

+0

@tuurboだと考えています。これはPHP 5.3以降で有効です。 Dreamweaverが有効だと考えるかどうかは関係ありません。その他の答えはいずれも古いバージョンのPHPでも動作します。 – Matthew

1

array_multisort第2の配列をソートし、第1の配列に並べ替え順序を適用します。あなたの仕事をするには、並べ替え配列は$sort = array(2,0,1);でなければなりません(2番目の要素を0に、3番目の要素を1に、1番目の要素を2にします)。これはソートよりも適切であるように

あなたは、単にそれはそう

foreach ($sort as $key) { 
    $sorted_products[] = $products[$key]; 
} 
+0

+1、私が以前これを読んだとすれば、質問自体にコメントを残す必要はないからです。 – Matthew

1

array_multisort()はあなたがその特定のコードを達成しようとしているものを行うことはありません。

function sort_by_other_array ($input, $order) { 
    $result = array(); 
    foreach ($order as $item) { 
    $result[] = $input[$item]; 
    } 
    return $result; 
} 

これはエラーチェックしませんが、あなたがやりたいことになります。ここでは

がする関数です。 $orderで指定されたキーが$inputに存在することを確認するために、チェックを追加する必要があります。

関連する問題