Intereting Posts
Как расширить классы среды Yii и место для размещения файлов PHPUnit – «Никаких тестов не выполняется» при использовании файла конфигурации curl: Ran на разных серверах возвратил различные IP-адреса Добавление / обновление настраиваемых полей после выбора снимков в окне мультимедиа (WordPress) Выбор случайного файла из каталога Как я могу объединиться с PHP и Dot Net Database Как заменить вкладки пробелами внутри переменных в PHP? Как настроить SSL с помощью Laravel 5 за балансировщиком нагрузки (ssl_termination)? $ _POST пуст при использовании IntelliJ Symfony2 – данные из элемента сбора формы заканчиваются как массивы вместо объектов Mock в PHPUnit – множественная конфигурация одного и того же метода с разными аргументами Передача данных через Modal Bootstrap и получение переменной php? как установить phalcon.so в mac os Встраивание PHP в XML Случайные URL-адреса PHP (короткий URL)

Клавиши сортировки массива PHP

У меня есть простой многоадресный массив, как описано ниже, который мне нужно заказать по его метке ключа (а не по значению ключа).

array( 1 => array( 2 => array(); 11 => array(); 20 => array(); 31 => array(); 4 => array(); 43 => array(); 12 => array(); 3 => array(); ); 2 => array(); 11 => array(); 20 => array(); 31 => array(); 4 => array(); 43 => array(); 12 => array(); 3 => array(); ); 

Проблема в том, что мой заказ возвращает мои упорядоченные массивы:

1, 11, 12, 2, 20, 3, 31, т. Д. И не 1,2,3,4,11,12, т. Д.

Это моя функция упорядочения:

 private function orderByKey(&$array) { ksort($array); foreach($array as $value) { if (is_array($value)) { $this->orderByKey($value); } } } 

Что здесь может быть неправильным?

Благодарю.

Вам нужно получить доступ к $ value как ссылку на запись в $ array

 private function orderByKey(&$array) { ksort($array); foreach($array as &$value) { if (is_array($value)) { $this->orderByKey($value); } } } 

Второй параметр для sort () и ksort () – sort_flags. Если вы хотите, чтобы он сортировался по номеру, а не по строковому значению (как это выглядит в настоящее время), вы должны установить этот параметр:

 ksort($my_array, SORT_NUMERIC); 

Проверьте страницу для sort (), где объясняются разные флаги сортировки: http://www.php.net/manual/en/function.sort.php

Вы можете использовать функцию natksort .

Рядом с тем, чтобы не сортировать подмассивы, я также прочитал ваш вопрос о том, что у вас возникла проблема в сортировке ключей в том порядке, в котором вы указываете в своем вопросе ( 1, 11, 12, 2, 20, 3, 31, ... ):

 uksort($array, function($a, $b) { return strcmp("$a ", "$b "); }); 

Этот вид заполняет каждый ключ пробелами, так что 3 больше 20, но меньше 30.

Полный код:

 private function orderByKey(&$array) { if (!is_array($array)) return; uksort($array, function($a, $b) { return strcmp("$a ", "$b "); }); array_walk($array, [$this, 'orderByKey']); } 

Или если ksort() работает для вас:

 private function orderByKey(&$array) { if (!is_array($array)) return; ksort($array); array_walk($array, [$this, 'orderByKey']); } 

http://www.php.net/manual/en/function.uksort.php

Это то, что вы ищете; вместо ksort:

 uksort($array, function ($a, $b) { return $a - $b; }); 
  ksort($myarray); foreach ($myarray as $key => $val) { echo "$key = $val\n"; }