Недавно я хотел как можно быстрее найти в массиве числовые значения (целые, двойные числа и числа с порядковыми номерами).
Первоначально я использовал is_numeric (), поскольку мы часто используем его в качестве нашей проверки для проверки, но я хотел посмотреть, смогу ли я вставить что-то быстрее.
Я заметил, что если я приведу к плавающему значению, то, пока значение является числовым, PHP будет производить значение, отличное от нуля. Таким образом, используя побитовые операторы, я могу сделать логический НЕ ноль в операторе if, окружающем поиск.
if (~(~(float)$value)) {
// add to result array
}
После первоначального тестирования я обнаружил, что все кажется ускоренным на 2 целых секунды с массивом чисел и не чисел среднего размера. Однако это было немного больше, чем простой модульный тест.
Есть ли у кого-нибудь опыт выполнения приведения типа float против is_numeric? Я знаю, что они, вероятно, не на 100% функционально эквивалентны (я думаю, что приведение к числу с плавающей точкой будет преобразовывать шестнадцатеричное), но для моих целей я собираюсь только приводить целые числа, двойные числа и числа с обозначением экспоненты. Это увеличение производительности по сравнению с is_numeric () или я это себе представлял?