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

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但没有成功.

Jon*_*Jon 9

既然你已经拥有所需的排序顺序的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.