Сортировать многомерный массив по одномерному массиву - PullRequest
3 голосов
/ 08 августа 2011

мультидим. массив выглядит так:

$arr = array(
  array(
    'id' => 'first',
    'name' => 'John',
    'age' => 17,
  ),

  array(
    'id' => 'second',
    'name' => 'Mary',
    'age' => 26,
  ),

  array(
    'id' => 'third',
    'name' => 'Eve',
    'age' => 21,
  ),

);

И массив, который решает, как сортируется $arr, выглядит так:

$sort_by = array('third', 'first', 'second');

Итак, я хочу отсортировать элементы первого массива по его полю id и второму массиву.

В этом случае первый массив должен быть:

$arr = array(
  array(
    'id' => 'third',
    'name' => 'Eve',
    'age' => 21,
  ),

  array(
    'id' => 'first',
    'name' => 'John',
    'age' => 17,
  ),

  array(
    'id' => 'second',
    'name' => 'Mary',
    'age' => 26,
  ),


); 

Ответы [ 2 ]

4 голосов
/ 08 августа 2011
function sort_by_1d($item_1, $item_2)
{
    $sort_by = array('third', 'first', 'second');
    $item_1_i = array_search($item_1['id'], $sort_by);
    $item_2_i = array_search($item_2['id'], $sort_by);
    return $item_1_i - $item_2_i;
}

usort($arr, 'sort_by_1d');
1 голос
/ 08 августа 2011
$sortedArray = array();
foreach($sort_by as $sort){
  foreach($arr as $val){
    if($val['id'] === $sort){
      $sortedArray[] = $val;
    }
  }
}

Украдено у: Сортировать подраздел массива на основе заказа другого массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...