Найти иголку в стоге сена, добавив ее, пока игла не найдена - PullRequest
0 голосов
/ 08 июня 2018

У меня есть этот массив случайных чисел, созданный таблицей в базе данных

$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, затем остановитесь.Как я могу это сделать?Я уверен, что это просто, но я не могу обернуть голову вокруг этого.

Ответы [ 5 ]

0 голосов
/ 09 июня 2018

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

0 голосов
/ 08 июня 2018
<?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)
0 голосов
/ 08 июня 2018

Вы можете использовать простой цикл 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.Это также будет обрабатывать числа с плавающей запятой, округляя их.Числа, выходящие за пределы большого числа в массиве, возвращают сообщение «вне диапазона».

0 голосов
/ 08 июня 2018

Зацикливание не требуется.
Вы можете отфильтровать массив и указать минимальный номер эха.

$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

0 голосов
/ 08 июня 2018

Это будет делать то, что вы просили, но мне интересно, какова ваша цель на самом деле, потому что не похоже, что это было бы полезно.

$numbersArr = array(3,5,17,19,24,30,38,47,52);
$userInput = 35;

if (in_array($userInput, $numbersArr)){

 echo 'found needle';

}else{


    for ($loop = $userInput;$loop < 9999999; $loop++) {

        if (in_array($loop,$numbersArr)){

            echo 'found needle';
            break;

        }

    }  // end of for loop

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...