У меня очень нагруженный участок кода (поступает много информации, которую надо быстро обработать) и я не хочу нагружать его дополнительными функциями. Я не знаю, заполнен ли массив, знаю только то, что это точно массив. Я передаю его в in_array(). Всё ли отработает корректно, если он будет пустым?
Видать спросить тут быстрее чем вызвать in_array с пустым массивом. Кстати эта функция медленнее чем проверка в массиве по ключу через isset или empty, и чем больше массив тем медленнее проверка.
эта функция медленнее чем проверка в массиве по ключу через isset или empty
in_array проверяет значения, какая связть с проверками по ключу? Если имелось ввиду перебирать весь массив по ключам, то очевидно, что это будет гораздо медленней, чем обход массива с помощью итератора.
toxa82, т.е. вы предлагаете значение элемента массива еще и в ключи класть? Да, конечно, при достаточно большом массиве, проверка 1 значения по ключу будет быстрее чем перебор всего массива. Но тут надо помнить, что ключи имеют свои особенности, к примеру, числа в строке будут преобразованы в числа.
toxa82, не мелочи, как минимум это ограничения на использование подобного подхода (не получится "что угодно пихать"), когда знаешь эти особенности. А если не знаешь или забыл, то огромное поле для ошибок. Если бы неявные преобразования были бы мелочью, то никто бы не заморачивался типами в 7ке, благодаря чему php стал языком с нормальным контролем.
К примеру, "мелочи":
if (empty($arr[$id])) {
$arr[$id] = $id;
}
empty проводит сравнение с false с приведением типов, а значит существующие значения 0, '', false будут проходить проверку и это полностью нарушает логику.
if (!in_array($id, $arr)) {
$arr[] = $id;
}
здесь in_array опять же используется с приведением типов, а значит использование разных типов приведет к проблемам. А если говорит про версии до 8, то там будет вообще полный бред, in_array(1,['1q']) выдаст true.
Поэтому все это мелочи, пока не наткнетесь на ошибки, пораждаемые такими "мелочами".
Vitsliputsli, ну естественно это надо учитывать, но ваши аргументы не повод не использовать мой вариант. не сохраняйте туда пустые значения и всё будет хорошо.
Vitsliputsli, будет, не надо что попало туда пихать, если ключи то строки и числа, если значения - то пусть пихает что угодно лишь бы не пустое, чтоб отрабатывала проверка (на крайняк можно isset использовать, тогда лишь бы null не пихать). Думаю тут стандартная логика и средние знания php должны срабатывать.
Задача была ускорить кусок кода, а не обкладывать его защитами от дураков.