2010-07-08 2 views
-1

Сравнение строк в PHP кажется мало сложным. Я не знаю, есть ли другие способы сделать это.Сравнение строк в PHP

Например говорят:

$t1 = "CEO"; 
$t2 = "Chairman"; 
$t3 = "Founder"; 

$title = "CEO, Chairman of the Board"; 

if (!strcmp($t1, $title)) { 
    echo $title."<br>"; echo $Fname."<br>"; echo $Lname."<br>"; 
} else if (!strcmp($t2, $title)) { 
    echo $title."<br>"; echo $Fname."<br>"; echo $Lname."<br>"; 
} else if (!strcmp($t3, $title)) { 
    echo $title."<br>"; echo $Fname."<br>"; echo $Lname."<br>"; 
} 

Это не дает никакого результата, как описано выше $title имеет слово $t1 и $t2 в нем. Как я могу это сделать?

+2

Что вы пытаетесь достичь? – sarsnake

+0

Каждый путается ?? Я не знаю, почему я позволю себе объяснить. $ t1, $ t2, $ t3 являются постоянными. значение $ titile продолжает меняться, говорят, что это может быть несколько раз «CEO», «Основатель», «Председатель», или иногда это может быть «редактор», «разработчик» и т. д., так что я хочу, если $ title включает в себя константы $ t1, $ t2 и $ t3, тогда он должен указать имя и фамилию. переменные $ Fname и $ Lname детали не включены в этот код. – mathew

+0

все были смущены, потому что из вашего кода не видно, чего вы пытаетесь достичь. – sarsnake

ответ

8

The strcmp() испытания на точного равенства. Вы скорее хотите проверить, содержит ли строка содержащую часть. В этом случае скорее используйте stripos() или stristr(). Оба они могут быть использованы следующим образом:

if (stripos($title, $t1) === false) { 
    // $title does not contain $t1 
} 
if (stristr($title, $t1) === false) { 
    // $title does not contain $t1 
} 

Если вы хотите учетом регистра сравнения (например, chairman не должен быть равен Chairman), а затем использовать strpos() или strstr() вместо этого.

+0

Я буду второй strpos() – sarsnake

0

Попробуйте разделить заголовок на «,» и используя in_array ... или strcmp на отдельных частях массива ... или найти совершенно новое и лучшее решение.

2

Я предполагаю, что вы хотите напечатать эту строку, если один из $t1, $t2, $t3 происходит в $title:

foreach (array($t1, $t2, $t3) as $titlePart) { 
    if (strpos($title, $titlePart) !== false) { 
     echo $title . "<br>" . $Fname . "<br>" . $Lname . "<br>"; 
     break; 
    } 
} 
0

Возможно, это то, что вы хотите?

$t1 = "CEO"; 
$t2 = "Chairman"; 
$t3 = "Founder"; 

$title = "CEO, Chairman of the Board"; 

if (!is_integer(strpos($t1, $title))) { 
    echo $title."<br>"; echo $Fname."<br>"; echo $Lname."<br>"; 
} else if (!sis_integer(strpos($t2, $title))) { 
    echo $title."<br>"; echo $Fname."<br>"; echo $Lname."<br>"; 
} else if (!is_integer(strpos($t3, $title))) { 
    echo $title."<br>"; echo $Fname."<br>"; echo $Lname."<br>"; 
} 
0

Не знаете, что именно вы пытаетесь сделать.

Если вы просто проверка или положение Существование использования StrPos()

$t1 = "CEO"; 

$title = "CEO, Chairman of the Board"; 

$startposition = strpos($title, $t1); 

if ($startposition === false) { 
    //not found 
} else { 
    //found (@ index $startposition) 
} 

Опять же, не 100% уверен, что вы пытаетесь найти/сделать из этих данных, но мы надеемся, что вытащу вас в в правильном направлении.

0
if (stripos($title, $t1) != false && stripos($title, $t2) != false && stripos($title, $t3) != false) { 
    echo $Fname ."<br />" . $Lname ; 
} 

на основе вашего комментария - это то, что вы хотите. Если t1, t2 и t3 ВСЕ, то распечатайте имя и фамилию.

0

Возможно, вы захотите использовать preg_match() или strcasecmp() при поиске таких строк, потому что они могут игнорировать случай. strcomp() чувствителен к регистру и обычно не использует «CEO, председатель правления», например.

Смежные вопросы