Объедините строчки!== ложь и поз <

Есть ли способ объединить

 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)
Другие вопросы по тегам