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
Форумы портала PHP.SU :: Версия для печати :: Определить значению в массиве
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Определить значению в массиве

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

1. pantela - 01 Февраля, 2017 - 13:36:21 - перейти к сообщению
напр. есть переменная 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. Если уж очень геморой через запятую совместить, может исключение сделаю в массиве без неё...
2. pantela - 01 Февраля, 2017 - 18:05:45 - перейти к сообщению
Растерялся
3. Строитель - 01 Февраля, 2017 - 18:49:13 - перейти к сообщению
pantela, и рад бы помочь вам, да только ничего из вашего поста мне не понятно.
4. pantela - 07 Февраля, 2017 - 17:14:11 - перейти к сообщению
хмм, жаль что более ясно не могу описать задачу, хотя вроде и так ясно. исходя из значения, надо подставлять его в массив для сравнения к ключам, и далее выводить соответствующее значение из массива. Растерялся
5. teleoperator27 - 07 Февраля, 2017 - 17:55:12 - перейти к сообщению
ни разу такого массива не встречал
6. Мелкий - 07 Февраля, 2017 - 20:15:30 - перейти к сообщению
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));
7. pantela - 08 Февраля, 2017 - 09:41:42 - перейти к сообщению
Мелкий
Отл. Вот только если подставить напр. 20, тогда выводит 7, а должно выводить 1 Растерялся

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

teleoperator27
Да уж... с чем только не столкнешься...
8. Мелкий - 08 Февраля, 2017 - 10:07:18 - перейти к сообщению
Ну уж можно было бы и отладить, что я потерял обращение к элементу массива, а динамическая типизация слопала и не подавилась
PHP:
скопировать код в буфер обмена
  1. if ($isRange[0] <= $need and $need <= $isRange[1]) {


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

 

Powered by ExBB FM 1.0 RC1