2013-12-11 8 views
0
foreach($item_cost as $node) { 
      if($node->textContent != "$0" || $node->textContent != "$0.00" || $node->textContent != "S$0" || $node->textContent != "S$0.00"){ 
       $price = $node->textContent; 
       break; 
      } 
     } 

Я пытаюсь сделать это Пропустить 0.00 и захватить первое найденное значение, например, 17.50Перерыв не работает должным образом

Я все еще получаю 0.00

+0

Каково точное значение '$ node-> textContent'? –

+0

Это не перерыв, что там не так. –

ответ

1

попытаться изменить, если положения этого:

foreach($item_cost as $node) { 
    if (!in_array($node->textContent, array("$0","$0.00","S$0","S$0.00"))) { 
    $price = $node->textContent; 
    break; 
    } 
} 

легче читать и лучше работает.

И если вам нужны все цены (а не только первые) использовать его как это:

$prices = array(); 

foreach($item_cost as $node) { 
    if (!in_array($node->textContent, array("$0","$0.00","S$0","S$0.00"))) { 
    $prices[] = $node->textContent; 
    } 
} 

Теперь $prices массив включает в себя все не пустые значения.

+0

Ницца, спасибо. О, да, но когда у меня есть Break, я не получаю результата, если я его удалю, и эхо получаю несколько результатов – TransformBinary

+0

break; завершает весь foreach -loop, но перед этим присваивает значение для цены $. Так что вам нужно получить все значения, которые не пустые? – Hardy

+0

Мне нужно только получить 1 Значение похоже на $ price = $ node-> textContent; значение не обновляется в переменной. Я попробовал $ price = "asdasdasd", и он обновлен – TransformBinary

1

Ваши бинарные операторы должны быть && и не ||, потому что $node->textContent не должен быть равен ни одному из заданных строковых значений.

if($node->textContent != "$0" && $node->textContent != "$0.00" && $node->textContent != "S$0" && $node->textContent != "S$0.00"){ 

В качестве альтернативы, вы могли бы рассмотреть регулярное выражение для сопоставления с чем-то, что стоит ноль долларов либо в долларах США или сингапурских долларов:

if (!preg_match('/^S?\$0(\.00)?$/', $node->textContent)) { 
    $price = $node->textContent; 
    break; 
} 

Или используйте in_array() с фиксированным набором значений, чтобы соответствовать против.

+0

Если я положил &&, значит ли это, что все условие должно быть выполнено? но каждый текст не имеет все условия сразу. они могут иметь только один вид состояния сразу? – TransformBinary

+0

@TransformBinary Да, все условия должны быть выполнены в том смысле, что переменная не должна быть равна * любому значению *. –

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