У меня есть один массив ($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, но безуспешно.
Поскольку у вас уже есть идентификаторы в желаемом порядке сортировки, единственным препятствием для эффективной сортировки $images
является невозможность сразу получить изображение с его идентификатором. Итак, давайте исправим это, переиндексируя $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
.
Попробуйте это $ final = array ();
foreach($sort as $key) { foreach($images as $img) { if($img['id'] == $key ) { $final[]=$img; } } } print_r($final);