Php 按与另一个数组相同的顺序排序数组
我有两个数组,如下所示: 数组1,$id:Php 按与另一个数组相同的顺序排序数组,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有两个数组,如下所示: 数组1,$id: $ids = array('8', '56', '33', '23', ... and so on); $positions[0] = array('id' => '56', 'latitude' => '45.34234', 'longitude' => '34.23942'); $positions[1] = array('id' => '8',
$ids = array('8', '56', '33', '23', ... and so on);
$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.
数组2(多维和关联),$positions:
$ids = array('8', '56', '33', '23', ... and so on);
$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中的顺序与在$id中的顺序相同
我该怎么做呢?Upd:我想我误解了。通过
$id
对$positions
进行排序更容易
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;
}
然后可以使用usort()进行搜索代码>
usort($ids,“cmp”);
功能cmp($a$b)
{
全球美元排序;
如果($sort[$a]==$sort[$b]){
返回0;
}
返回($sort[$a]<$sort[$b])?-1:1;
}
这段代码可能需要测试,但我希望您已经了解了一般的想法。如果排序相反,请将-1:1
更改为1:-1
尝试此代码
$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);
检查这里,您尝试了什么?使用usort()
,其中比较函数比较id
元素在$id
中的位置。不,没有尝试过。我不知道如何将其功能应用于此特定上下文。我认为您排序错误的数组。他想排序$positions
,而不是$ids
@Barmar是的,我已经编辑过了。按$positions
排序$id
更有趣,所以我想我的大脑欺骗了我,让我改为:)