Почему я не могу численно отсортировать вложенный массив? - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть двумерный массив, который выглядит следующим образом:

array(2) {
  [45]=>
  array(5) {
    [0]=>
    int(2)
    [1]=>
    int(5)
    [2]=>
    int(1)
    [3]=>
    int(3)
    [4]=>
    int(4)
  }
  [42]=>
  array(5) {
    [0]=>
    int(5)
    [1]=>
    int(4)
    [2]=>
    int(3)
    [3]=>
    int(2)
    [4]=>
    int(1)
  }
}

Значения ключей внешнего массива являются числовыми, но не начинаются с 0 и не являются последовательными.Я хочу отсортировать внешний массив по возрастанию ключей, а внутренние массивы - по возрастанию значений, поэтому я пытаюсь сделать следующее:

ksort($arr);
foreach ($arr as $a) {
    sort($a);
}
var_dump($arr);

, который сортирует внешний массив должным образом, но, кажется, не касается внутреннеговообще массивов:

array(2) {
  [42]=>
  array(5) {
    [0]=>
    int(5)
    [1]=>
    int(4)
    [2]=>
    int(3)
    [3]=>
    int(2)
    [4]=>
    int(1)
  }
  [45]=>
  array(5) {
    [0]=>
    int(2)
    [1]=>
    int(5)
    [2]=>
    int(1)
    [3]=>
    int(3)
    [4]=>
    int(4)
  }
}

Почему это так и как я могу добиться того, чего хочу?Я думаю, что это связано с вложенностью массива, потому что следующее работает, как и ожидалось:

$test = array(5,2,3,1,4);
sort($test);
var_dump($test);

array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}

1 Ответ

11 голосов
/ 09 ноября 2011

foreach перебирает копию массива.Если вы хотите изменить фактические значения, вы должны ссылка их:

//               v
foreach ($arr as &$a) {
    sort($a);
}
unset($a);

Из документации :

КакPHP 5, вы можете легко изменить элементы массива, поставив перед $ value символ &.Это назначит ссылку вместо копирования значения.

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