Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: array

 PHP.SU

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


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

> Описание: Сортировка по ключам, вывод по значению
8Apollon8
Отправлено: 05 Февраля, 2015 - 19:38:30
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Всем привет! Я новичок в PHP и занимаюсь тем, что ломаю себе голову простыми задачками.
Вот одна из них:
Имеется массив $array = array('Иванов' => 15, 'Петорв' => 40, 'Сидоров' => 50, 'Пупкин' =>
18, 'Попов' => 51, 'Орлов' => 38, 'Карпов' => 35);
Необходимо сделать сортировку по значениям и вывести ключи в список:
Возрастная группа до 20: Иванов Пупкин
Возрастная группа до 45: Петорв Орлов Карпов
Возрастная группа от 50: Сидоров Попов
Решил задачу так:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $array = array('Иванов' => 15, 'Петорв' => 40, 'Сидоров' => 50, 'Пупкин' =>
  4.         18, 'Попов' => 51, 'Орлов' => 38, 'Карпов' => 35);
  5.  
  6.         foreach($array as $keyAge => $valAge){
  7.                 if ($valAge <= 20) {
  8.                         $age[0][$keyAge] = $valAge;
  9.                 }
  10.                 elseif ($valAge > 20 and $valAge < 45) {
  11.                         $age[1][$keyAge] = $valAge;
  12.                 }
  13.                 else
  14.                         $age[2][$keyAge] = $valAge;
  15.         }
  16.  
  17. function age20()
  18. {
  19.         global $age;
  20.         foreach ($age[0] as $key => $value) {
  21.                 echo $key."\n";
  22.         }
  23. }
  24. function age45()
  25. {
  26.         global $age;
  27.         foreach ($age[1] as $key => $value) {
  28.                 echo $key."\n";
  29.         }
  30. }
  31. function age50()
  32. {
  33.         global $age;
  34.         foreach ($age[2] as $key => $value) {
  35.                 echo $key."\n";
  36.         }
  37. }
  38.  
  39. echo "Возрастная группа до 20: ",age20();
  40. echo "<br>Возрастная группа до 45: ",age45();
  41. echo "<br>Возрастная группа от 50: ",age50();
  42.  

Вопрос.
Возможно ли написать менее грамоздкий код без применения такого количества функций?
Если да, то могли бы вы привести пример?
(Добавление)
Пардон. Ошибся темой.

(Отредактировано автором: 05 Февраля, 2015 - 19:43:50)

 
 Top
hrushachka
Отправлено: 05 Февраля, 2015 - 20:21:02
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Янв. 2015  


Помог: 1 раз(а)




Сократи из 3-х функций 1 сделай.
PHP:
скопировать код в буфер обмена
  1. function age($i_)// "Возрастная группа до 20: ",age(0);
  2. {
  3.         global $age;
  4.         foreach ($age[$i_] as $key => $value) {
  5.                 echo $key;
  6.         }
  7. }

А я вот так сделал:
PHP:
скопировать код в буфер обмена
  1. $array = array('Иванов' => 15, 'Петров' => 40, 'Сидоров' => 50, 'Пупкин' =>
  2.         18, 'Попов' => 51, 'Орлов' => 38, 'Карпов' => 35);
  3. asort($array);
  4. echo "Возрастная группа до 20: ";
  5. $CASE=1;
  6. foreach ($array as $key=>$value)
  7. switch (true)
  8. {
  9. case($value < 20):
  10. echo " $key";
  11. break;
  12. case ($value >=20 and $value <45):
  13. if ($CASE===1)
  14.         {
  15.         echo "<br>Возрастная группа до 45:";
  16.         $CASE=2;
  17.         }
  18. echo " $key";
  19. break;
  20. case ($value >=45):
  21. if ($CASE===2)
  22.         {
  23.         echo "<br>Возрастная группа от 50:";
  24.         $CASE=3;
  25.         }
  26. echo " $key";
  27. }

(Отредактировано автором: 05 Февраля, 2015 - 20:22:26)

 
 Top
8Apollon8
Отправлено: 05 Февраля, 2015 - 21:04:22
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Спасибо. Как раз к этому я сейчас и шел. Почти доделал, но не успел )
 
 Top
8Apollon8
Отправлено: 06 Февраля, 2015 - 17:40:19
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




А вот есшо:
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = array('Иванов' => 15, 'Петорв' => 40, 'Сидоров' => 50, 'Пупкин' =>
  3.         18, 'Попов' => 51, 'Орлов' => 38, 'Карпов' => 35);
  4.  
  5.  
  6. foreach($array as $keyAge => $valAge){
  7.                 if ($valAge <= 20) {
  8.                         $age[0][$keyAge] = $valAge;
  9.                         $age1 = implode(", ", array_flip($age[0]));
  10.                 }
  11.                 elseif ($valAge > 20 and $valAge < 45) {
  12.                         $age[1][$keyAge] = $valAge;
  13.                         $age2 = implode(", ", array_flip($age[1]));
  14.                 }
  15.                 else{
  16.                         $age[2][$keyAge] = $valAge;
  17.                         $age3 = implode(", ", array_flip($age[2]));
  18.                 }
  19.         }
  20.  
  21. echo "Возрастная группа до 20: $age1";
  22. echo "<br>Возрастная группа до 45: $age2";
  23. echo "<br>Возрастная группа от 45: $age3";
  24.  
  25.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB