按与另一个数组相同的顺序对数组进行排序

时间:2012-12-05 16:32:46

标签: php arrays sorting multidimensional-array

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

数组1,$ ID:

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

数组2(多维以及关联),$ position:

$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(与他们的纬度和经度)在$ position中的顺序与$ id中的顺序相同。

我该怎么做?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

更新:我想我误会了。按$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 : 1更改为1 : -1