0

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

$myArray=array(

'a'=>array('id'=>1,'text'=>'blabla1'),
'b'=>array('id'=>2,'text'=>'blabla2'),
'c'=>array('id'=>3,'text'=>'blabla3'),
'd'=>array('id'=>4,'text'=>'blabla4'),

);

そして、別の配列に存在するキーa、b、c、dで上記の配列をソートしたい:

$tempArray=array('c','a','d','b');

どうすれば $myArray

次のようになります。

$myArray=array(

'c'=>array('id'=>3,'text'=>'blabla3'),
'a'=>array('id'=>1,'text'=>'blabla1'),
'd'=>array('id'=>4,'text'=>'blabla4'),
'b'=>array('id'=>2,'text'=>'blabla2'),

);

私を助けてくれてありがとう!

4

1 に答える 1

3

これを行う最も簡単で最も効率的な方法は、並べ替え順序を保持する配列を繰り返し処理し、並べ替えられた新しい配列を作成することです。

$sorted = array();

foreach ($tempArray as $order) {
  if (isset($myArray[$order])) {
    $sorted[$order] = $myArray[$order];
  }
}

print_r($sorted);

これが機能するのは、連想配列には要素が配列に追加された順序が暗黙的に存在するためです。

動いているのを見る


編集

ソート機能を含むソリューションは、これよりも効率が大幅に低下する可能性があります。これを行うには、コールバックを受け取る関数を使用する必要があるためです。これには、関数呼び出しの暗黙のオーバーヘッドが既に含まれています。

並べ替え機能はアイテムを比較することでも機能します。つまり、これらのソリューションの複雑さは、このソリューションの複雑さよりも大きくなります (この複雑さは単に ですO(n))。また、ソート関数の戻り値を導出するには、ターゲット配列を調べて、比較対象の各キーの位置を比較ごとに見つける必要があり、さらに複雑になります。

于 2013-03-08T15:20:59.190 に答える