我有一个由数据库中的表创建的随机数数组
$numbersArr = array(3,5,17,19,24,30,38,...)
$userInput = 35;
到目前为止,这就是我所拥有的
if (in_array($userInput, $numbersArr)){
echo 'found needle';
}else{
//add one to the $userInput until find a needle
}
所以程序会增加1到35,直到找到38,然后停止。我怎样才能做到这一点?我很确定它很简单,但我无法绕过它。
答案 0 :(得分:2)
无需循环。
您可以过滤数组,并回显最小数。
$numbersArr = array(3,5,17,19,24,30,38,12,15,21,67);
$userInput = 35;
// Filter array, return values larger than user input
$filtered = array_filter($numbersArr,
function ($value) use($userInput) {
return $value >= $userInput;
}
);
If(count($filtered)>0){
// Echo smallest number in array
Echo min($filtered);
}else{
Echo "no number larger than user input";
}
在此处试试:https://3v4l.org/fMg7K
答案 1 :(得分:1)
您可以使用简单的for循环:
$numbersArr = array(3,5,17,19,24,48,74,30,38);
sort($numbersArr);
$lastNumbr = end($numbersArr);
$userInput = 35.5;
if ($userInput <= $lastNumbr) {
for ($i = ceil($userInput); $i <= $lastNumbr; $i+=1) {
if (in_array($i, $numbersArr)) {
echo 'found needle: '. $i;
break;
}
}
} else {
echo "input number out of range, must be below " . $lastNumbr;
}
这将获取$userInput
值并向其添加1,直到它到达$numbersArr
中的针。这也将通过舍入它们来处理浮点数。超出数组中高位数的数字会返回“超出范围”的消息。
答案 2 :(得分:0)
这会做你所要求的,但我想知道你的目标究竟是什么,因为看起来这样做似乎并没有用。
def unicode_to_string(_in_unicode):
return unicodedata.normalize('NFKD', _in_unicode).encode('ascii', 'ignore')
答案 3 :(得分:0)
<?php
$numbers = array(3,5,17,19,24,30,38,41,47);
$guess = 35;
$limit = max($numbers);
while($guess <= $limit && !in_array($guess, $numbers))
$guess++;
var_dump($guess);
输出:
int(38)
答案 4 :(得分:0)
SergGr实际上是正确的,只需循环数组并将项目与用户输入进行比较就更快。
这是我找到最快的方法。
$match = false;
Foreach($numbersArr as $item){
If($item >= $userInput)
If($item < $match || $match == false)
$match = $item;
}
Echo "\n\n" . $match;
在此处查看结果:https://3v4l.org/v9og4