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

あなたの問題は、xpathを使用するよりも、ループの一般的な理解、配列への値の割り当て、およびphpでのif条件の使用に関するものです。

  • foreachループでは、配列内$nodenodeValue同じインデックスにそれぞれを割り当てています。常に1つの値(最後の値)のみが含まれます。$target$target
  • 条件文では、 (またはアイテムがない場合は、おそらく最初に宣言する必要があります)文字列'adidas'とif比較していますが、これは決して真ではありません。arraynull$nodes$target

あなたはおそらく次のようなことをしたいと思うでしょう:

$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 に答える