0

2つの配列があり、1つは表示されるデータを保持し、もう1つは順序を保持します。

次の配列は、表示するforeachループで使用されます。

array(
   [Posts] =>
            [0] =>
                 id => 7
                 content => 'some content'
            [1] =>
                 id => 3,
                 content => 'some other content'
            [2] =>
                 id => 4,
                 content => 'some more content'
            [3] =>
                 id => 2,
                 content => 'some irrelevant content'
)

この配列には、ソート位置が含まれています。

array(
   2, 4, 7, 3
)

キーが2番目の配列と一致するidである連想配列の値に基づいて、最初の配列を並べ替えたいと思います。

期待される出力:

array(
   [Posts] =>
            [0] =>
                 id => 2,
                 content => 'some irrelevant content'
            [1] =>
                 id => 4,
                 content => 'some more content'
            [2] =>
                 id => 7
                 content => 'some content'
            [3] =>
                 id => 3,
                 content => 'some other content'
)
4

2 に答える 2

4

ソース配列のキーがIDと等しい場合は、非常に役立ちます。それは物事をスピードアップするでしょう。しかし今のところ、これによりソースデータがソート配列値に従って順序付けられます):

$res = array();
foreach( $sortArray as $sortId ) {
   foreach( $srcArray as $item ) {
      if( $item['id'] == $sortId ) {
         $res = $item;
         break;
      }
   }
}

編集

Idをキーとして使用した場合、2番目foreach()は役に立ちません。

$res = array();
foreach( $sortArray as $sortId ) {
   $res[] = $srcArray[ $sortId ];
}
于 2012-12-14T12:41:10.830 に答える
1

このソリューションは以下を使用しますusort

$sarray = array(2, 4, 7, 3);
$sarray = array_flip($sarray);

usort($posts, function($a, $b) use($sarray) {
    // TODO: check if the array-index exists ;)
    $index_a = $sarray[$a['id']];
    $index_b = $sarray[$b['id']];

    return $index_a - $index_b;
});

var_dump($posts);

私はクロージャを使用しているので、そのように使用するにはPHP5.3が必要です。5.2との互換性が必要な場合は、おそらくを使用する必要がありますcreate_function

于 2012-12-14T12:45:40.147 に答える