0

如何将输出转换为变量,以便我可以交叉引用它以查看它是否与我设置的另一个变量匹配

foreach ($nodes as $i => $node) {
  echo $node->nodeValue;
}

我知道这是不正确的并且行不通,但是:

foreach ($nodes as $i => $node) {
  $target = $node->nodeValue;
}

$match = "some text"

if($target == $match) {
  // Match - Do Something
} else {
  // No Match - Do Nothing
}

实际上,这解决了我的问题,但可能不是正确的方法:

libxml_use_internal_errors(true);
$dom = new DomDocument;
$dom->loadHTMLFile("http://www.example.com");
$xpath = new DomXPath($dom);
$nodes = $xpath->query("(//tr/td/a/span[@class='newprodtext' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'adidas')])[1]");
foreach ($nodes as $i => $node) {

echo $node->nodeValue, "\n";
$target[0] = $node->nodeValue;
}

$match = "adidas";

if($target == $match) {
    // Match
} else {
    // No Match
}
4

1 回答 1

1

您的问题更多是关于对循环的一般理解、为数组赋值以及在 php 中使用if条件而不是使用 xpath。

  • 在您的 foreach 循环中,您将每个分配给数组中的相同索引,$nodenodeValue始终只有一个值(最后一个)$target$target
  • 在您的if条件语句中,您将一个array(或者null如果$nodes没有项目,所以您可能想先声明$target)与字符串“adidas”进行比较,这永远不会是真的。

您可能想要执行以下操作:

$matched = false;
$match = 'adidas';
foreach ($nodes as $i => $node) {
    $nodeValue = trim(strip_tags($node->textContent));
    if ($nodeValue === $match) {
        $matched = true;
        break;
    }
}

if ($matched) {
    // Match
} else {
    // No Match
}

更新

我看到这个 xpath 表达式是在另一个答案中给你的,大概已经做了匹配,所以你只需要检查长度属性$nodes

if ($nodes->length > 0) {
    // Match
} else {
    // No match
}
于 2013-01-03T08:15:15.517 回答