基于另一个数组对多维数组进行排序

时间:2013-09-05 09:24:32

标签: php arrays sorting

我有一个数组($sort),如下所示:

  [1]=>16701

  [2]=>16861

  [3]=>16706

数组($images),如下所示:

  [0]=>
  array(4) {
    ["href"]=> string(35) "mystring"
    ["url"]=>  string(67) "mystring2"
    ["didascalia"]=> string(29) "mystring3"
    ["id"]=> 16861
  }
  [1]=>
  array(4) {
    ["href"]=> string(35) "mystring"
    ["url"]=>  string(70) "mystring2"
    ["didascalia"]=> string(37) "mystring3"
    ["id"]=> 16706
  }
  [2]=>
  array(4) {
    ["href"]=> string(35) "mystring"
    ["url"]=>  string(66) "mystring2"
    ["didascalia"]=> string(24) "mystring3"
    ["id"]=> 16701
  }

我需要使用$images基于值"id"$sort进行排序。 所以我的结果应该是

[0]=>
array(4) {
  ["href"]=> string(35) "mystring"
  ["url"]=>  string(66) "mystring2"
  ["didascalia"]=> string(24) "mystring3"
  ["id"]=> 16701
}

[1]=>
array(4) {
  ["href"]=> string(35) "mystring"
  ["url"]=>  string(67) "mystring2"
  ["didascalia"]=> string(29) "mystring3"
  ["id"]=> 16861
}

[2]=>
array(4) {
  ["href"]=> string(35) "mystring"
  ["url"]=>  string(70) "mystring2"
  ["didascalia"]=> string(37) "mystring3"
  ["id"]=> 16706
}

我该怎么办? 我尝试使用multisort,array_map但没有成功。

2 个答案:

答案 0 :(得分:9)

由于您已经按所需的排序顺序获得了ID,因此有效排序$images的唯一障碍是无法在给定ID的情况下立即获取图像。所以让我们通过重新索引$images来使用array_column将id作为数组键来修复它(不要被名称抛出,它也可以用于重建索引):

// array_column is only available in PHP 5.5+
$images = array_column($images, null, 'id');

在此之后获得一个排序数组是微不足道的:

$sortedImages = [];
foreach ($sort as $id) {
    $sortedImages[] = $images[$id];
}

对于PHP< 5.5你可以用{:1}}重新索引替换:

array_column

或者,您可以$imageIds = array_map(function($i) { return $i['id']; }, $images); $images = array_combine($imageIds, $images); 自己的作者获得implementation written in PHP

答案 1 :(得分:3)

试试这个    $最终=阵列();

foreach($sort as $key)
{
   foreach($images as $img)
  {
    if($img['id'] == $key )
   {
    $final[]=$img;
    }
  }
}

print_r($final);