-1

我有两个看起来像这样的数组:

数组 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(及其纬度和经度)在 $positions 中的顺序与它们在 $ids 中的顺序相同。

我怎样才能做到这一点?

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 回答