2011-02-07 2 views
1

Я по-прежнему относительно новичок в кодировании с PHP, хотя я знаком с несколькими другими языками, поэтому решил немного обмануть его.PHP переменные не равны

В основном я играю с регулярным выражением и веб-соскабливанием, и я работаю над скриптом для анализа некоторой информации с сайта. Я получаю информацию в порядке, но когда я пытаюсь сравнить значения в одном из своих массивов с строкой, она не приближается, даже если значения показывают одинаковые и представляют собой один и тот же тип данных. Вот пример того, с чем я работаю.

Здесь я просто пытаюсь получить мои значения по сравнению с извлечением набора значений с сайта, а затем перемещением их в 1-й массив. Предполагая, что значение массива [0] = «Значение», оно должно быть равно $ 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

вы можете попробовать trimmimg $ tmp trim ($ tmp) - там могут быть символы новой строки там ... могут также быть вещи, которые htmlentitied (попробуйте rightclick> посмотреть источник и посмотреть на $ tmp vs. $ str) –

+0

Не следует ли это делать в цикле? И что вы подразумеваете под «Мне нужно установить переменную в предыдущее значение в массиве»? – Nabab

+0

добавить 'echo '' $ tmp '==' $ str '"; 'above' if ($ tmp == $ str) {'посмотреть, что сравнивается, и есть какое-либо ведущее/конечное пространство – xzyfer

ответ

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).

+0

Спасибо. Я пробовал этот метод для доступа к значению массива, но я получаю ошибки «неопределенного смещения». Вот почему я также изучал методы current() и prev(). – jb11

+0

@ jb11: Скорее всего, это '-1', и ваше предположение может быть неправильным. Значение сравнения найдено в самой первой ячейке таблицы, и нет предшествующих ячеек таблицы. Вы должны показать пример своей таблицы данных, чтобы уточнить свой вопрос. – mario

+0

За исключением того, что когда массив заполняется выше, я могу напрямую обращаться к значениям с помощью массива [index]. Я знаю, что массив заполнен, но когда я использую цикл for и сравниваю массив [$ i] с моей строковой переменной, когда я пытаюсь установить свою новую переменную в массив [$ i-1], я получаю ошибку. – jb11

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 

, потому что нет также никакой необходимости для для -loop ...

+0

Спасибо за информацию, это немного упростит код. – jb11

+0

он также должен исправить вашу ошибку: P – tobyodavies

Смежные вопросы