Объедините строчки!== ложь и поз <
Есть ли способ объединить
if ((strpos($str,"abc") !== false) and (strpos($str,"abc") < 1000))
Или мне нужно два ifs для этого? Потому что, если abc отсутствует в строке, позиция равна -1, поэтому она меньше 1000.
Мне только интересно, если у php есть какие-то особенные для этой проблемы;)
Это:
if (strpos(substr($str,0,1000),"abc") !== false)
хороший способ для этого?
3 ответа
$pos_abc = strpos($str, 'abc');
if ($pos_abc !== false && $pos_abc < 1000)
Вы хотите проверить две разные вещи: 1-это abc
в строке? и 2- это abc
в первой тысяче символов этой строки. Несмотря на то, что его можно переписать в одном тесте, он не дает никакой пользы, и это фактически стоило бы много ясности в вашем коде.
Вы можете попробовать это, если хотите:
if( in_array(strpos($str,"abc"),range(0,1000),true))
Тем не менее, это не выглядит немного проще и имеет довольно высокую стоимость.
Возможно, лучшим способом было бы использовать переменную:
$pos = strpos($str,"abc");
if( $pos !== false && $pos < 1000) ...
Две проблемы:
- ваш двойной strpos
- сравнение (2. и оператор) зависит от первого, что может вызвать проблемы (например, в более поздних версиях php)
ОБНОВИТЬ:
красивый и быстрый шаблон решения:
if(($pos = strpos($str,"abc") !== false)?($pos < 1000):false)
красивый и чистый образец решения:
$pos = strpos($str,"abc");
if(($pos !== false)?($pos < 1000):false)