3

我有一个($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 但没有成功。

4

2 回答 2

9

由于您已经拥有所需排序顺序的 id,因此$images有效排序的唯一障碍是无法立即获取给定 id 的图像。因此,让我们通过重新索引$images以使用 id 作为数组键来解决这个问题array_column(不要被名称抛出,它也可以用于重新索引):

// 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,您可以将array_column重新索引替换为:

$imageIds = array_map(function($i) { return $i['id']; }, $images);
$images = array_combine($imageIds, $images);

或者,您可以获得由他自己的作者用 PHP 编写的实现array_column

于 2013-09-05T09:30:52.440 回答
3

尝试这个:

$final = array();

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

print_r($final);
于 2013-09-05T09:39:18.970 回答