来自简单 HTML Dom 解析器的数值被视为文本


Numerical value from Simple HTML Dom Parser treated as text

我正在使用PHP Simple HTML DOM解析器从网页中提取信息。 我检索的值之一是数字。 以下是我检索值的方法:

$num = $html->find('a[id=reviews_link] span');

然后,如果我想打印数字:

foreach($num as $val){
    echo $val;
}

这工作正常,并从原始页面打印正确的数字。 但是,如果我想在逻辑语句中使用数字,它不起作用。 因此,例如,如果返回一个数字并且其值为 20,当我这样做时:

foreach($num as $val){
    if($val > 15){
        echo $val." is greater than 15";
    }
}

if 语句未触发,并且不打印任何内容。 如果我在变量 ( "$val" 周围添加引号,也会发生同样的情况。 我也尝试使用各种PHP函数,如intvalfloat但这并没有改变任何东西。

如何将此变量视为数值?

当我print_r($val)有一个超长的simple_html_dom_node Object打印时,它似乎包含一堆数组。

$val实际上是一个simple_html_dom_node对象,echo $val;仅在此类实现魔术__toString()方法时才起作用。不过,这仅适用于某些情况,但尤其不适用于比较。

这里

你需要参考实际的对象属性,这里可能

if ($val->outertext > 15)

if ($val->plaintext > 15)

另请参阅 http://simplehtmldom.sourceforge.net/manual.htm#section_access 下的"魔法属性"选项卡

因为$num是 Dom 对象的数组,每个$val都是一个 dom 对象,而不是一个数字。由于其__tostring()方法,它打印为数字,但这不会将其转换为整数。

我相信这会起作用:

foreach($num as $val){
    if($val->value > 15){ // or $val->attributeName for whatever attribute contains the value
        echo $val." is greater than 15";
    }
}