Буду рад любой наводящей информации, а если кто пример напишет вообще будет волшебно!
$mass= array('33','765','34','77','12');
$number=53;
Спустя 8 минут, 2 секунды (18.06.2012 - 01:15) Zzepish написал(а):
Цыкл, не?
Спустя 5 минут, 53 секунды (18.06.2012 - 01:21) igorianru написал(а):
если бы, я знал точно что в массиве есть значение которое равно числу то можно было и перебрать да и можно было и так его найти без перебора, если честно даже в голове неукладывается как цикл сделать.. это типа сравнить числа заполнить расхождения найти самое маленькое расхождение и найти это число у которого самое маленькое расхождение....
но это както уж слишком замороченно..
но это както уж слишком замороченно..
Спустя 35 минут, 58 секунд (18.06.2012 - 01:57) Zzepish написал(а):
простым перебором чисел из масива, и сравнения с нужным
Спустя 5 минут, 20 секунд (18.06.2012 - 02:02) igorianru написал(а):
Это понятно, просто не факт что в массиве будет идентичное число, если он не найдёт такое же число как заданное выведит "лож"
Спустя 1 минута, 32 секунды (18.06.2012 - 02:04) rooor написал(а):
Zzepish
если нужно найти конкретное число, цикл не нужен, достаточно использовать in_array()
а тут надо надо найти максимально приближенное
если нужно найти конкретное число, цикл не нужен, достаточно использовать in_array()
а тут надо надо найти максимально приближенное
Спустя 10 минут, 55 секунд (18.06.2012 - 02:15) igorianru написал(а):
немного помудрил
получился новый массив:
теперь нужно по модулю, тоесть неучитывая минус, определить порядковый номер самого маленького числа, ну или хотябы вывести само число.
сам пока не накопал решение. кто нибудь знает как?
$mass= array('33','765','34','77','12');
$number=53;
foreach ($mass as $mass)
{
$mass=$mass-$number;
$mass2[]=$mass;
};
получился новый массив:
Array ( [0] => -20 [1] => 712 [2] => -19 [3] => 24 [4] => -41 )
теперь нужно по модулю, тоесть неучитывая минус, определить порядковый номер самого маленького числа, ну или хотябы вывести само число.
сам пока не накопал решение. кто нибудь знает как?
Спустя 28 минут, 42 секунды (18.06.2012 - 02:43) inpost написал(а):
Сделай if-else , чтобы получить положительные числа. Потом отсортируй массив не меняя ключи, и выведи первый элемент массива.
Хотя я бы сделал проще, if-else, получал бы разницу и сверял её с $temp, куда уже помещал подходящее число, и если оно меньше - заменял бы новым.
Хотя я бы сделал проще, if-else, получал бы разницу и сверял её с $temp, куда уже помещал подходящее число, и если оно меньше - заменял бы новым.
Спустя 7 минут, 30 секунд (18.06.2012 - 02:51) igorianru написал(а):
придумал чтото с чемто, но работает))
$number=53;
$mass= array('33','765','34','77','12');
foreach ($mass as $mass)
{
$mass=$mass-$number;
if($mass < 0)
{
$mass=-$mass;
}
$mass2[]=$mass;
};
$mass3=$mass2;
array_multisort ($mass3,SORT_ASC);
$key = array_search("$mass3[0]", $mass2);
echo $key;
Спустя 1 минута, 25 секунд (18.06.2012 - 02:52) igorianru написал(а):
inpost я кстати сам дошол до результата, потом увидел ваш ответ)
Спустя 3 часа, 27 минут, 43 секунды (18.06.2012 - 06:20) Tadochi написал(а):
if (array_key_exists($number,$mass))echo 'lol';
или
if (in_array($number,$mass))echo 'lol';
не так?
или
if (in_array($number,$mass))echo 'lol';
не так?

Спустя 3 дня, 9 часов, 27 минут, 10 секунд (21.06.2012 - 15:47) walerus написал(а):
Цитата |
нужно сделать поиск и найти максимально приближенное число |
с бОльшей или с мЕньшей стороны??, т.е. если массив array( 22, 33, 44 ,55, 58, 66 ) и дано число 56, какое число нужно выводить? 55 или 58 ?
Спустя 52 минуты, 24 секунды (21.06.2012 - 16:40) walerus написал(а):
$number = 22;
$mass = array('-33','765','34','77','12', '22', '19' );
function find_min_max_value( $mass, $number, $echo = 'all' )
{
asort($mass);
$result = array();
foreach( $mass as $mass_key => $mass_value )
{
if ( $mass_value < $number )
$result['min'][] = $mass_key;
if ( $mass_value == $number )
$result['equally'][] = $mass_key;
if ( $mass_value > $number )
$result['max'][] = $mass_key;
}
if ( $echo == 'all' )
return $result;
if ( $echo == 'min' )
{
$result = array_pop( $result['min'] );
return $result;
}
if ( $echo == 'max' )
{
$result = array_shift( $result['max'] );
return $result;
}
}
/*
Параметры для функции
$mass - Массив с числами
$number - Число, относительно которого будем искать
Не обязательный параметр
$echo - Если не будет указан, выведит все значения, как показанно в примере
Если Указать "min" - Выведит минимальный элемент массива, наиболее близкий к искомому числу
Если Указать "max" - Выведит максимальный элемент массива, наиболее близкий к искомому числу
переменная "equally" - в ней ключи массива совпавшие значением с искомым числом
*/
print_r( find_min_max_value( $mass, $number ) );
Результат:
Array
(
[min] => Array
(
[0] => 0
[1] => 4
[2] => 6
)
[equally] => Array
(
[0] => 5
)
[max] => Array
(
[0] => 2
[1] => 3
[2] => 1
)
)
сделал поиск всего, минимальных, максимальных и равных элементов.