2

例:

$arr = array('willion','kevien','john','smith');

$orderedArr = array('anne','bold','hellen','john','kevien','polm','smith','willion');

$arrそして、注文に基づいて注文を再分類したいと思い$orderdArrます。それ、どうやったら出来るの?

私が期待する結果:

「ジョン」、「ケビアン」、「スミス」、「ウィリオン」

これは順番に変更される$orderedArr可能性があるため、$arr の順序は $orderedArr と同じにする必要があります。

私の質問を簡略化して申し訳ありません.$arrはもっと複雑だと思います.$arrの構造は次のとおりです.print_r()を使用して配列を表示します.

array( [0] => array([id]=>1 [name]=>willion)
        [1] => array([id]=>2 [name]=>kevien)
        [2] => array([id]=>3 [name]=>join)
      )

どうもありがとうございました!

4

5 に答える 5

3

使用できますusort

$order = array_flip($orderedArr);
usort($arr, function ($a, $b) use($order) {
    return $order[$a] - $order[$b];
});
print_r($arr);

出力

Array
(
    [0] => john
    [1] => kevien
    [2] => smith
    [3] => willion
)

ライブデモを見る

于 2013-06-06T09:01:20.037 に答える
1

$arrが常に のサブセットであると仮定すると、以下$orderedArrを使用できますarray_intersect

$arr = array_intersect($orderedArr, $arr);
// $arr is now ['john', 'kevien', 'smith', 'willion']
于 2013-06-06T08:57:43.313 に答える
0

in_array注文配列をループして、必要な順序で新しい配列を構築するために使用して配列と比較できると思います

$arr = array('willion','kevien','john','smith');

$orderedArr = array('anne','bold','hellen','john','kevien','polm','smith','willion');

$orderedUsers = array();
foreach ($orderedArr as $data) {
    if(in_array($data,$arr))
    {
        $orderedUsers[] = $data;
    }
}

これは出力されます

array (size=4)
  0 => string 'john' (length=4)
  1 => string 'kevien' (length=6)
  2 => string 'smith' (length=5)
  3 => string 'willion' (length=7)

ライブデモ

于 2013-06-06T09:01:37.483 に答える