top*_*rts 2 php arrays sorting
我有一个($sort)看起来像这样的数组:
  [1]=>16701
  [2]=>16861
  [3]=>16706
Run Code Online (Sandbox Code Playgroud)
和一个数组($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
  }
Run Code Online (Sandbox Code Playgroud)
我需要排序$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
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我尝试使用multisort,array_map但没有成功.
既然你已经拥有所需的排序顺序的ID,以排序的唯一屏障$images有效是无法立即获取给予其ID的图像.因此,我们进行了修复,通过重建索引$images使用id作为使用数组键array_column(不要被名称抛出,也可用于重建索引):
// array_column is only available in PHP 5.5+
$images = array_column($images, null, 'id');
Run Code Online (Sandbox Code Playgroud)
在此之后获得排序数组是微不足道的:
$sortedImages = [];
foreach ($sort as $id) {
    $sortedImages[] = $images[$id];
}
Run Code Online (Sandbox Code Playgroud)
对于PHP <5.5,您可以用以下方法替换array_column重建索引:
$imageIds = array_map(function($i) { return $i['id']; }, $images);
$images = array_combine($imageIds, $images);
Run Code Online (Sandbox Code Playgroud)
或者,您可以获得他自己的作者用PHP编写的实现array_column.