PHP变量不相等

时间:2011-02-07 02:45:04

标签: php

我仍然相对较新的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";
            }

2 个答案:

答案 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)。