PHP IF语句不起作用 - 但变量确实包含正确的数据

时间:2011-03-15 21:34:11

标签: php

我正在尝试使用IF语句检查变量是否包含一段文本,如果是,则回显是,否则回显否。很简单,我知道,但它似乎并不适合我。我是PHP的新手,所以对于猴子来说,任何回复都应该是可以理解的! :P

这是我的代码。请记住我正在使用PHP简单的html dom。

<?php
include 'simple_html_dom.php'; 
$html = file_get_html('http://www.amazon.co.uk/New-Apple-iPod-touch-Generation/dp/B0040GIZTI/ref=br_lf_m_1000333483_1_1_img?ie=UTF8&s=electronics&pf_rd_p=229345967&pf_rd_s=center-3&pf_rd_t=1401&pf_rd_i=1000333483&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_r=1ZW9HJW2KN2C2MTRJH60');
$stock_data = $html->find('span[class=availGreen]',0); 

if ( $stock_data == "In stock." ) {
  echo "Yes";
} 
echo "No";

?>

现在我已使用echo $ stock_data测试变量是否包含文本;它打印正确的文本,但是if语句仍然返回并且回显为No。

任何帮助,如果这很简单就道歉。

5 个答案:

答案 0 :(得分:3)

使用功能

var_dump($stock_data);

也许其中有非人类可读的字符,您不会检查它们。您始终可以修剪那些

答案 1 :(得分:1)

我尝试了你的代码,$ stock_data返回:

<span class="availGreen">In stock.</span>

而不是:

有货。

我建议作为一名新开发者,您应该获得Firebug for Firefox或Chrome等工具,它们可以帮助您调试底层错误......虽然在这种情况下,因为html只是输出span标签内的文本,了解$ stock_data等于的唯一方法是查看来源。

答案 2 :(得分:0)

对于包含文本,请使用此strposstripos

如果陈述

,这是正确的
            if ( $stock_data == "In stock." ) {
    echo "Yes";
} else {
    echo "No";
}

答案 3 :(得分:0)

我对你正在使用的库知之甚少,但是如果它返回一个实现__toString()(由echo使用)的对象,那么这可能会起作用:

if ( (string) $stock_data == "In stock." ) {

否则,请检查返回您要查找的字符串的成员函数。

我应该从手册中添加:

  

值得注意的是,在PHP 5.2.0之前,__toString方法仅在与echo()或print()直接组合时才被调用。

因此,如果您正在运行更新的PHP,那么关于转换为字符串的答案部分将不适用。 (可能还有一些成员函数可以调用以获取字符串数据减去HTML和特殊字符。)

答案 4 :(得分:0)

我不确定file_get_html()是什么,但您可能想要使用file_get_contents()(可能使用DOMDocument和DOMXpath)。

$html = file_get_contents('http://www.amazon.co.uk/New-Apple-iPod-touch-Generation/dp/B0040GIZTI/ref=br_lf_m_1000333483_1_1_img?ie=UTF8&s=electronics&pf_rd_p=229345967&pf_rd_s=center-3&pf_rd_t=1401&pf_rd_i=1000333483&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_r=1ZW9HJW2KN2C2MTRJH60');

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXpath($dom);

$in_stock = $xpath->query("/html/body/div[@id='divsinglecolumnminwidth']/form[@id='handleBuy']/table[3]/tbody/tr[3]/td/div/span");

if(!empty($in_stock)) {
   echo "yes";
} else {
   echo "no";
}

如果物品 NOT 库存时占用相同的量程,您可以测试这样的值:

if($in_stock->item(0)->nodeValue == "In stock.") { echo "yes"; } else { echo "no"; }

如果字符串“In stock”,您可能还想使用preg_match。完全改变。