-1

次のような 2 つの配列があります。

配列 1、$ids:

$ids = array('8', '56', '33', '23', ... and so on);

配列 2 (多次元および連想)、$positions:

$positions[0] = array('id' => '56',
                 'latitude' => '45.34234',
                 'longitude' => '34.23942');

$positions[1] = array('id' => '8',
                 'latitude' => '49.34834',
                 'longitude' => '34.93942');

... and so on.

両方の配列に ID が含まれていますが、ID は異なる配列で同じ順序ではありません。私が望むのは、ID (緯度と経度を含む) が $ids にあるのと同じ順序で $positions にあることです。

これどうやってするの?

4

2 に答える 2

2

このコードを試してください、

$new_positions = array();
foreach($ids as $k=>$v){
  foreach($positions as $k1=>$v1){
    if($v == $v1['id']){
       array_push($new_positions, $v1);
       continue;
    }
  }
}

$positions = $new_positions;
print_r($positions);

こちらをチェックしてください、http://codepad.org/phWxOEC1

于 2012-12-05T16:49:17.417 に答える
1

Upd:誤解していると思います。並べ替え$positions$idsさらに簡単です。

usort($positions, "cmp");
function cmp($a, $b)
{
    global $ids;
    $a_id = array_search($a['id'], $ids);
    $b_id = array_search($b['id'], $ids);
    if ($a_id == $b_id) {
        return 0;
    }
    return ($a_id < $b_id) ? -1 : 1;
}

$ids並べ替える必要が ある場合は古いバージョン$positions

まず、フィールドの並べ替えを覚えておく必要がありますid。これは、あなたのような連想配列では効果的に検索できないためです。

$sort = array();
$positionsCount = count($positions);
for ($i = 0; $i < $positionsCount; $i++)
{
    $sort[ $positions[$i]['id'] ] = $i;
}

その後、 を使用して検索できますusort();

usort($ids, "cmp");
function cmp($a, $b)
{
    global $sort;
    if ($sort[$a] == $sort[$b]) {
        return 0;
    }
    return ($sort[$a] < $sort[$b]) ? -1 : 1;
}

このコードはテストが必要かもしれませんが、一般的なアイデアを理解していただければ幸いです。逆に並べ替える場合は、 を に変更-1 : 11 : -1ます。

于 2012-12-05T16:45:24.697 に答える