Intereting Posts
Доктрина: запрос только там, где отношения не существуют? Почему PHP не разрешает частные константы? mysql select и где над несколькими таблицами (очень сложно) Пользовательские короткие коды WooCommerce Установите глобальные переменные в Laravel 5 Предупреждение «Доступ к ресурсу еще не разрешено» при использовании подготовленного оператора Как подделать переменную $ _SERVER ? PHP – get_headers () возвращает неверный результат, если символы не UTF находятся в URL-адресе Преобразование не вложенного и скобочного массива в вложенный массив График Facebook, как получить пользовательский фид, с сообщениями о симпатиях и комментариями пользователя? CRC8-Check in PHP пользовательский канал регистрации монолога в команде symfony2 Каков наилучший способ справиться с этим: большая загрузка через PHP + медленное соединение с клиента = время ожидания скрипта перед загрузкой файла полностью Как НЕ автозагрузить класс в php? Использование OpenID для веб-сайтов .NET / Windows и PHP / Linux / Apache

Сортировка многомерного массива на основе другого массива

У меня есть один массив ($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, но безуспешно.

Solutions Collecting From Web of "Сортировка многомерного массива на основе другого массива"

Поскольку у вас уже есть идентификаторы в желаемом порядке сортировки, единственным препятствием для эффективной сортировки $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);