2013-07-08 4 views
1

это мой массивСортировка Вложенный массив в соответствии с другим массивом

$items = array("100"=> 
    array(
     'id' => 15, 
     'category' => array('id'=>'100010'), 
     'description' => array('type'=>'Drink'), 
    ), 
    "101"=> 
    array(
     'id' => 13, 
     'category' => array('id'=>'100055'), 
     'description' => array('type'=>'Fruit'), 
    ), 
    "102"=> 
    array(
     'id' => 21, 
     'category' => array('id'=>'100002'), 
     'description' => array('type'=>'Vege'), 
    ) 
); 

$soryBy = array(array('id'=>'100055'),array('id'=>'100002'),array('id'=>'100010')); 

Что подход для сортировки $itemscategory согласно $soryBy? Есть ли какая-либо существующая функция php, которую я могу использовать? Благодаря

ответ

2

Первое, что вы собираетесь хотите сделать, это расплющить ваш массив $ SortBy

$sortBy = array_map(function($a) { return $a["id"]; }, $sortBy); 

Затем вы можете использовать usort с закрытием

usort($items, function($a, $b) use ($sortBy) { 
     return array_search($a["category"]["id"], $sortBy) - array_search($b["category"]["id"], $sortBy); 
}); 

Примечание это решение должно работа для PHP 5.3 и выше.

+0

Я получаю ошибку 'array_map(): Аргумент # 2 должен быть массивом', в чем проблема, но я создаю ручной сглаживающий массив в usort, он отлично работает! – Eric

+0

Я думаю, проблема в том, что второй параметр array_map должен быть $ soryBy не $ sortBy на основе вашего кода – Orangepill

Смежные вопросы