1

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

$pets = array(
   'cat' => 'Lushy',
   'dog' => 'Fido',
   'fish' => 'Goldie' 
);

次のようにして配列を並べ替える必要がある場合:

fish
dog
cat

その順序で、これらの値のいずれかが存在する場合と存在しない場合があると仮定すると、次の方法よりも良い方法があります。

$new_ordered_pets = array();

if(isset($pets['fish'])) {
    $new_ordered_pets['fish'] = $pets['fish'];      
}
if(isset($pets['dog'])) {
    $new_ordered_pets['dog'] = $pets['dog'];        
}
if(isset($pets['cat'])) {
    $new_ordered_pets['cat'] = $pets['cat'];        
}

var_dump($new_ordered_pets);

出力:

Array
(
    [fish] => Goldie
    [dog] => Fido
    [cat] => Lushy
)

よりクリーンな方法はありますか?おそらく、再配列する配列と、それを記録したいインデックスを単に指定するだけで、魔法を実行することに気付いていない組み込み関数がありますか?

4

3 に答える 3

3

uksort別の配列に基づいて (キーで) 配列をソートするために使用できます(これは PHP 5.3 以降でのみ機能します)。

$pets = array(
   'cat' => 'Lushy',
   'dog' => 'Fido',
   'fish' => 'Goldie' 
);
$sort = array(
    'fish',
    'dog',
    'cat'
);
uksort($pets, function($a, $b) use($sort){
    $a = array_search($a, $sort);
    $b = array_search($b, $sort);

    return $a - $b;
});

デモ: http://codepad.viper-7.com/DCDjik

于 2012-06-27T22:07:11.100 に答える
2

注文はすでにあるので、値を割り当てるだけです ( Demo )。

$sorted = array_merge(array_flip($order), $pets);

print_r($sorted);

出力:

Array
(
    [fish] => Goldie
    [dog] => Fido
    [cat] => Lushy
)

関連:別の配列に基づいて配列をソートしますか?

于 2012-06-27T22:09:12.553 に答える
0

必要なのはuksortです。

// callback 
function pets_sort($a,$b) {
    // compare input vars and return less than, equal to , or greater than 0. 
} 

uksort($pets, "pets_sort");
于 2012-06-27T22:07:34.727 に答える