我有两个看起来像这样的数组:
数组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中的顺序相同。
我该怎么做?
答案 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);
答案 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
。