[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сравнение переменной с массивом
Bolik
привет!

вот столкнулся с такой проблемой. нужно сравнить переменную с каждым членом массива, если переменная <= первого члена, то значение должно быть 0, если <= второго, то 1 и т.д. как лучше написать цикл? можно ли вообще как-то решить задачу без цикла?

писал так

$si=getsistrix($l);
$sis=array(0,0.07,0.2,0.6,1,1.5,8,16,20,1000);
$i=0;
while ($i++<10) {
if($si<=$sis[$i]) break;
return $i;
}
}



но это не работает :)

заранее спасибо!
Rand
Этот пример вполне будет работать, если немного изменить:
$si = getsistrix($l);

$sis = array(0,0.07,0.2,0.6,1,1.5,8,16,20,1000);

foreach ($sis as $key => $val) {
if($si <= $val) {
echo $key;
break;
}
}
Естественно, внутри if можно оставить только один return $key, если у тебя это в функции или методе.
Valick
1) Сама по себе задача несколько загадочная, если не секрет что это?
2) для обхода массива обычно используют foreach

_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
у тя текст противоречит с кодом.

Цитата
если переменная <= первого члена, то значение должно быть 0, если <= второго, то 1 и т.д.


Цитата
if($si<=$sis[$i]) break;
  return $i;


вот код на один результат, т.е. если самый "крупный" эл-т массива больше $si - то 0 если меньше - то 1

$si = 2;
$sis = array(0,0.07,0.2,0.6,1,1.5,8,16,20,1000);

$res = max($sis);

$res = $si <=max($sis) ? 0 : 1;


если те нужен результат по кaждому эл-ту - то есть array_map() - и получить результат в виде массива например

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Bolik
ничего загадочного) в массиве записаны границы классов 0-0,07, 0,07-0,2 и т.д. и значение переменной нужно нормировать в зависимости от того, к какому классу она относится.

текст не противоречит с кодом. нумерация в массиве начинается с нуля и это как раз то, что надо.

сейчас попробую ваши варианты. спасибо!
HErATuB

$e = 2;
$arr = array(0,0.07,0.2,0.6,1,1.5,8,16,20,1000);

if(in_array($e,$arr))
return array_keys($arr, $e);

неее?
Rand
Неее biggrin.gif
Игорь_Vasinsky
Цитата
текст не противоречит с кодом.

ну как))

Цитата
нужно сравнить переменную с каждым членом массива,



а тут у тебя

if($si<=$sis[$i]) break;


как первое true - то ты выпрыгнул из цикла

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.