2011-03-15 132 views
0

我想使用IF语句来检查一个变量是否包含一段文本,如果是的话,回声是,如果没有,回声没有。简单我知道,但它似乎并没有为我工作。我对PHP很新,所以任何回复都应该可以理解为猴子! :PPHP的IF语句不工作 - 变量确实包含正确的数据,但

这是我的代码。请记住,我正在使用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语句仍然会返回并显示回显的编号。

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

+0

您是否试图将转储的文本从您的控制台直接复制到您的代码中,覆盖“有现货”? – 2011-03-15 21:39:02

回答

0

对于包含一段文字,用这个strposstripos

这里是正确的if语句

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

使用功能

var_dump($stock_data); 

也许有非人类可读的字符它和你没有检查他们。您可以随时修剪那些

0

我不知道很多关于你正在使用的库,但如果它返回一个实现了__toString()的对象(通过回声使用),那么也许这将工作:

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

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

我应该从手动添加此:

值得一提的是,PHP 5.2.0当它直接与回波()或印刷组合__toString方法仅称为()之前。

所以,如果你正在运行一个更新的PHP,我的答案有关铸造字符串的部分将不适用。 (仍然可能会有一些成员函数可以调用以获取字符串数据减去HTML和特殊字符。)

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"; 
} 

如果相同的跨度被占用时,该项目是在股票,你可以测试这样的值:

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

你也可能要使用的preg_match如果字符串“库存“。根本没有变化。

1

我想你的代码,$ stock_data回报:

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

,而不是:

库存。

我建议作为一个新的开发者,你应该得到像Firebug for Firefox或Chrome这样的工具,它可以帮助你调试潜在的错误...虽然在这种情况下,因为html只是输出span标签内的文本,要知道$ stock_data等于什么的唯一方法就是查看源代码。