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 :: Определить значению в массиве

 PHP.SU

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


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

> Без описания
pantela
Отправлено: 01 Февраля, 2017 - 13:36:21
Post Id



Частый посетитель


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


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




напр. есть переменная 12
Есть масив
PHP:
скопировать код в буфер обмена
  1. [violationPercents] => Array
  2.         (
  3.             [12-17] => 7.00
  4.             [6-11] => 4.00
  5.             [1,2,3] => 6.00
  6.             [4-5] => 1.00
  7.             [18-60] => 1.00
  8.         )


По переменной 12 мне надо вывести значение из массива, в данном прим. надо выводить 7.00.

напр. если переменная 9, тогда надо выводить 4.00

Пробовал через explode(), немного запутался, т.к. тут и через запятую идут ключи...

спс.Ув.

P.S. Если уж очень геморой через запятую совместить, может исключение сделаю в массиве без неё...

(Отредактировано автором: 01 Февраля, 2017 - 13:42:11)

 
 Top
pantela
Отправлено: 01 Февраля, 2017 - 18:05:45
Post Id



Частый посетитель


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


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




Растерялся
 
 Top
Строитель
Отправлено: 01 Февраля, 2017 - 18:49:13
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




pantela, и рад бы помочь вам, да только ничего из вашего поста мне не понятно.
 
 Top
pantela
Отправлено: 07 Февраля, 2017 - 17:14:11
Post Id



Частый посетитель


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


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




хмм, жаль что более ясно не могу описать задачу, хотя вроде и так ясно. исходя из значения, надо подставлять его в массив для сравнения к ключам, и далее выводить соответствующее значение из массива. Растерялся
 
 Top
teleoperator27
Отправлено: 07 Февраля, 2017 - 17:55:12
Post Id



Посетитель


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


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




ни разу такого массива не встречал
 
My status
 Top
Мелкий Супермодератор
Отправлено: 07 Февраля, 2017 - 20:15:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function findByRange(array $in, $need)
  4. {
  5.     foreach ($in as $ranges => $val) {
  6.         foreach (explode(',', $ranges) as $range) {
  7.             $isRange = explode('-',$range);
  8.             if (count($isRange) == 1) {
  9.                 if ($range == $need) {
  10.                     return $val;
  11.                 }
  12.             } elseif (count($isRange) == 2) {
  13.                 if ($isRange[0] <= $need and $need <= $isRange) {
  14.                     return $val;
  15.                 }
  16.             } else {
  17.                 throw new \LogicException('impossible range '.$range);
  18.             }
  19.         }
  20.     }
  21.     return null;
  22. }
  23.  
  24. $in = Array(
  25.     '12-17' => 7.00,
  26.     '6-11' => 4.00,
  27.     '1,2,3' => 6.00,
  28.     '4-5' => 1.00,
  29.     '18-60' => 1.00,
  30. );
  31. var_dump(findByRange($in, 12));


-----
PostgreSQL DBA
 
 Top
pantela
Отправлено: 08 Февраля, 2017 - 09:41:42
Post Id



Частый посетитель


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


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




Мелкий
Отл. Вот только если подставить напр. 20, тогда выводит 7, а должно выводить 1 Растерялся

А ещё подставил напр. 150 и не вывелось impossible range...

teleoperator27
Да уж... с чем только не столкнешься...

(Отредактировано автором: 08 Февраля, 2017 - 09:51:01)

 
 Top
Мелкий Супермодератор
Отправлено: 08 Февраля, 2017 - 10:07:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Ну уж можно было бы и отладить, что я потерял обращение к элементу массива, а динамическая типизация слопала и не подавилась
PHP:
скопировать код в буфер обмена
  1. if ($isRange[0] <= $need and $need <= $isRange[1]) {


impossible range - это для ошибочно заданного диапазона '10-20-40'. Если подходящего нет - будет null.


-----
PostgreSQL DBA
 
 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