2015-06-02 2 views
0

У меня возникли проблемы с PHP usort(). Я в настоящее время есть несколько индексированный массив, который выглядит следующим образом:USort Multi Index Array - не возвращается правильно

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [title] => c 
        [more_fields] => '...' 
       ) 

      [1] => Array 
       (
        [title] => a 
        [more_fields] => '...' 
       ) 

      [2] => Array 
       (
        [title] => b 
        [more_fields] => '...' 
       ) 

      [3] => Array 
       (
        [title] => xz 
        [more_fields] => '...' 
       ) 

     ) 
) 

Я пытаюсь Переберите массива и сортировки каждого индекса по индексу title. Вот код, без какой-либо из моих тестовых входов:

foreach($my_arr as $arr) { 
    if(count($arr) > 1) { 
     usort($arr, function($a, $b) { 
      return strcasecmp($a['title'], $b['title']); 
     }); 
    } 
} 

Теперь я хотел бы ожидать, что работать, и я знаю, что я поражая правильные индексы, если эхо из $a['title'] и $b['title'] до моего возвращения я получаю данные, выглядит следующим образом:

a _ c | xz _ a | b _ a | c _ a | b _ c | xz _ b | c _ b | xz _ c 

Это хорошо и денди, но как только foreach закончена, мой массив остается неизменным. Похоже, глядя на документы PHP, что usort() передает массив по ссылке и возвращает логические значения при завершении. Что мне не хватает в моем usort(), который оставляет мой массив неизменным?

ответ

3

foreach работает над копией массива. Для того, чтобы изменить фактический массив, нужно сослаться на значение (обратите внимание &):

foreach($my_arr as &$arr) { 

Или вы должны быть в состоянии использовать ключ и фактический массив $my_arr[$key]:

foreach($my_arr as $key => $arr) { 
    if(count($arr) > 1) { 
     usort($my_arr[$key], function($a, $b) { 
      return strcasecmp($a['title'], $b['title']); 
     }); 
    } 
} 
+0

Я должен был знать как работает foreach, но я думаю, мой мозг продолжал замалчивать его и обвинять в беспорядке. Спасибо, что указали это на вашу помощь! будет приниматься, когда разрешено. –

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

  • Нет связанных вопросов^_^