我仍然相对较新的PHP编码,虽然我熟悉其他一些语言,所以我决定愚弄它。
基本上我一直在玩正则表达式和Web抓取,并且正在编写一个脚本来解析站点中的一些信息。我得到的信息很好,但是当我尝试将我的一个数组中的值与一个字符串进行比较时,即使值显示相同且数据类型相同,它也不会相等。这是我正在使用的一个例子。
这里我只是试图通过从站点检索一组值然后将它们移动到1d数组来比较我的值。假设array [0] =“Value”的值,它应该等于$ str。我已经检查了gettype(),并且$ tmp和$ str都是字符串,但它们没有注册为相等。我也试过我的数组中的current()值(这实际上对我的目的更好)但是它是相同的。
我真正需要做的是在我的数组中找到一个值并将其与$ str进行比较。如果匹配,我需要将变量设置为数组中的先前值。
$html = file_get_contents("http://www.site.com");
$str = "Value";
preg_match_all ('/<td class=\"name\">(.*?)<\/td>/s', $html, $return, PREG_PATTERN_ORDER);
for ($ii = 0; $ii < count($return[0]); $ii++) {
$array[$ii] = $return[0][$ii];
}
$tmp = $array[0];
if ($tmp == $str) {
echo "yes";
}
答案 0 :(得分:1)
$tmp
将始终在您正在使用的代码中包含<td...>...</td>
标记,您可能想要替换
for ($ii = 0; $ii < count($return[0]); $ii++) {
//Matches of whole pattern (not just 1st group)
$array[$ii] = $return[0][$ii];
}
与
$array=$return[1]; //array of matches of the 1st group
因为也不需要for-loop ......
答案 1 :(得分:1)
结果处理稍微偏离。
preg_match_all ('#<td class="name">(.*?)</td>#s', $html, $return);
您将在(.*?)
中获得$return[1]
个匹配项。而且你不需要迭代它。只需使用:
$array = $return[1];
然后你可能想要比较结果列表中的所有条目,而不仅仅是第一个:
foreach ($array as $i=>$tmp) {
if ($tmp == $str) {
echo "yes";
}
}
要获取上一个(?)值,只需访问$array[$i-1]
(代替上面的echo
)。