2016-02-03 3 views
0

ScreenShot Работает отлично для всех значений, разделенных запятой, но не работает для Restauant. Пожалуйста, предложите, что мне нужно сделать.Проблемы с strpos() в php

<?php 
     $service="Restaurant,24x7_room_service,Parking,currency_exchange,deposite_boxes,Laundry,pool,gym,AC,TV,Fridge,Intercom,Intercom,Extra Bed (if needed Chargeable)"; 

     //$dservices=str_ireplace(',',' ',$d['services']); 
     $dservices="Restaurant,24x7_room_service,Parking,currency_exchange,deposite_boxes,Laundry,pool,gym,AC,TV"; 
     $loop=explode(",",$service); 

     foreach($loop as $action) 
     { 
     ?> 
<li style="width:50%;float:left;padding: 10px;"><?php if(strpos($dservices,$action)=='') { echo '<i style="color:red;" class="fa fa-times-circle"></i>';}else{ ?><i style="color:#004386;" class="fa fa-check-circle"></i> <?php } ?><?= $action ?> </li> 
<?php }?> 
+1

'strpos' возвращает число, почему вы сравниваете его со строкой? – Barmar

+0

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

+0

@Niraj Gelani я отредактировал с скриншотом, пожалуйста. – Divakarcool

ответ

2

Замените ваш, если условие со следующим:

if(strpos($dservices, $action) === false) 
+0

Спасибо, Нирадж Гелани '===', используя этот рабочий тон. – Divakarcool

0

Потому что ваш ресторан находится в положении 0 будет справедливо для сценария, существуют, но возвращаемое значение 0 делает ваше if условие ложно.

Изменено эту строку кода

if(strpos($dservices,$action)=='') 

в

if(strpos($dservices,$action)=== false) 

это будет проверять номер позиции, и если не существует обратный отрицательное значение.

+0

Что означает «истина для случая»? Это не что-то на английском. – Barmar

+0

Это для сценария. – Afsar

+0

Я до сих пор не могу разобрать ваши объяснения. – Barmar

0

Лучшим способом было бы взорвать $dservices в другой массив, вместо использования strpos.

$dservices_array = array_flip(explode(',', $dservices)); 
foreach ($loop as $action) { 
    ?> 
    <li style="width:50%;float:left;padding: 10px;"> 
    <?php 
    if(!isset($dservices_array[$action])) { 
     echo '<i style="color:red;" class="fa fa-times-circle"></i>'; 
    } else { 
     echo '<i style="color:#004386;" class="fa fa-check-circle"></i>'; 
    } 
    echo $action; 
    ?> </li> 
<?php }?> 

Использование strpos может вызвать ложное соответствие. Например, если $action: TV и $dservices содержит HDTV.