Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按与另一个数组相同的顺序排序数组_Php_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

Php 按与另一个数组相同的顺序排序数组

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',

我有两个数组,如下所示:

数组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',
                 '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
更有趣,所以我想我的大脑欺骗了我,让我改为:)