PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 2
Daxe_rag Отправлено: 04 Октября, 2017 - 03:09:23 • Тема: Сортировка ассоциативного массива • Форум: Вопросы новичков

Ответов: 8
Просмотров: 794
[quote=Строитель]Daxe_rag

У вас получается не совсем правильно. Если сортировать массив из моего примера, то он отсортируется корректно, но если заменить, например, последнее значение "param" на 4, то есть меньше максимального, записанного в $values, но больше первого элемента, то функция запишет этот ключ как первый.
(Добавление)
Спасибо за ответы. Если кому-то вдруг понадобится, вот рабочий код сортировки:
PHP:
скопировать код в буфер обмена
  1.  
  2. $names = array("Jhon" => array("status" => "working", "id" => "21", "param" => "8"),
  3. "Mike" => array("status" => "working", "id" => "10", "param" => "4"),
  4. "Nill" => array("status" => "fired", "id" => "4", "param" => "3"),
  5. "Tom" => array("status" => "working", "id" => "2", "param" => "12"),
  6. "Jake" => array("status" => "fired", "id" => "88", "param" => "3"));
  7. function work_var1(&$names, $parametr){
  8.                 for ($j=0; $j<count($names); $j++){
  9.                         reset($names);
  10.                         for ($i=0; $i<count($names); $i++){
  11.                                 $key_curr=key($names);
  12.                                 next($names);
  13.                                 $key_next=key($names);
  14.                                 if ($names[$key_curr][$parametr]>$names[$key_next][$parametr]){
  15.                                         $temp=$names[$key_curr];
  16.                                         unset($names[$key_curr]);
  17.                                         $names[$key_curr]=$temp;
  18.                                         reset($names);                         
  19.                                 }
  20.                         }
  21.                 }
  22. }
  23. work_var1($names, "param");
  24.  
Daxe_rag Отправлено: 24 Сентября, 2017 - 16:29:59 • Тема: Сортировка ассоциативного массива • Форум: Вопросы новичков

Ответов: 8
Просмотров: 794
Доброго дня!

На собеседовании столкнулся с заданием: сортировка ассоциативного массива, содержащего вложенный массив, по одному из элементов из вложенного массива, не используя функций сортировки.

Мне пришло в голову единственное решение:

PHP:
скопировать код в буфер обмена
  1.  
  2. $names = array("Jhon" => array("status" => "working", "id" => "21", "param" => "8"),
  3. "Mike" => array("status" => "working", "id" => "10", "param" => "4"),
  4. "Nill" => array("status" => "fired", "id" => "4", "param" => "3"),
  5. "Tom" => array("status" => "working", "id" => "2", "param" => "12"),
  6. "Jake" => array("status" => "fired", "id" => "88", "param" => "3"));
  7.         for ($i=0; $i<count($names); $i++){
  8.                 for (reset($names); next($names)!=false; next($names)) {
  9.                         $key_next=key($names);
  10.                         prev($names);
  11.                         $key_curr=key($names);
  12.                         if ($names[$key_curr]['param']>$names[$key_next]['param']){
  13.                                 $temp=$names[$key_curr];
  14.                                 $names[$key_curr]=$names[$key_next];
  15.                                 $names[$key_next]=$temp;
  16.                         }
  17.                 }
  18.         }
  19. print_r($names);
  20.  


Отсортировать массив требовалось по возрастанию элемента "Param".

Честно говоря, интуитивно, мне такой способ сортировки кажется немного "кривоватым". Отсюда такой вопрос: какими еще способами можно отстортировать ассоциативный массив, разумеется не используя готовых функций?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB