Почему in_array() срабатывает 1 раз?

232
13 июля 2017, 01:52

Почему срабатывает 1 раз? Выводит 1, а потом всё время 2. Хотя in_array() содержит все поля, которые проверяет.

$objidd = mysql_query("SELECT `internal-id` FROM object1");
$objarr=  mysql_fetch_array($objidd);
$usertr = mysql_query("SELECT idzk FROM allurlszhhk");
while($row =  mysql_fetch_array($usertr)){       
     $xml = simplexml_load_file("xmlfiles/".$row['idzk'].".xml"); 
     foreach ($xml->offer as $offer){   
         $id = 'internal-id';
         $idint = $offer[$id];        
         var_dump( $idint, $objarr );
         if ( in_array( $idint, $objarr ) ) {
              echo 'Сработало первое выражение'; 
         }
         else{
              echo 'Сработал false выражение';     
         }
      }
}

Вывод скрипта:

object(SimpleXMLElement)#6 (1) { 
    [0]=> string(8) "f7989545" 
}
array(2) { 
   [0]=> string(8) "f7989545" 
   ["internal-id"]=> string(8) "f7989545" 
}
Сработало первое выражение!
object(SimpleXMLElement)#5 (1) {
    [0]=> string(8) "f7989546" 
}
array(2) { 
    [0]=> string(8) "f7989545" 
    ["internal-id"]=> string(8) "f7989545" 
}
Сработал false выражение!
object(SimpleXMLElement)#4 (1) {
    [0]=> string(8) "f7989547" 
}
array(2) { 
    [0]=> string(8) "f7989545" 
    ["internal-id"]=> string(8) "f7989545" 
} 
Сработал false выражение!
object(SimpleXMLElement)#7 (1) { 
    [0]=> string(8) "f7989548" 
} 
array(2) { 
    [0]=> string(8) "f7989545" 
   ["internal-id"]=> string(8) "f7989545" 
} 
Сработал false выражение!
object(SimpleXMLElement)#48 (1) {
    [0]=> string(8) "f7989549" 
} 
array(2) {
    [0]=> string(8) "f7989545"
    ["internal-id"]=> string(8) "f7989545" 
} 
Сработал false и тд */
Answer 1

Суть вашей проблемы что вы вы выдёргиваете в

$objarr=mysql_fetch_array($objidd); одну строчку из object1 где колонки в виде массива, а не всю таблицу в массив как ожидаете.

Answer 2

Вы проверяете var_dump вместо самого in_array:

if(var_dump(in_array($idint, $objarr))){

Но var_dump сам по себе ничего не возвращает, поэтому if видит NULL и идёт к else.

Замените код и проверьте, что на самом деле получает in_array:

    var_dump( $idint, $objarr );
    if ( in_array( $idint, $objarr ) ) {
        echo '1';
    }
    else{
        echo '2';
    }

UPD. Судя по добавленному вами дампу, вывод соответствует данным.

  1. в обоих переменных лежат массивы;
  2. в первом сравнении in_array находит [0]=> string(8) "f7989545" внутри массива
array(2) {  
   [0]=> string(8) "f7989545" 
   ["internal-id"]=> string(8) "f7989545" 
}

а во всех последующих не находит, потому что искомых элементов в них действительно нет. Например, [0]=> string(8) "f7989546" нет в массиве

array(2) { 
    [0]=> string(8) "f7989545" 
    ["internal-id"]=> string(8) "f7989545" 
}

и так далее.

READ ALSO
Cоздание и распространение пакета PHP+JS

Cоздание и распространение пакета PHP+JS

Есть простая фреймворконезависимая библиотека на PHP для вывода статистикиК ней есть фронтенд, строящий диаграммы на JS+CSS, требующий еще и Сhart

203
Php / Codeigniter / errors

Php / Codeigniter / errors

Изучаю ПХП и работу на движке CodeIgniterПри открытии сайта на локальном сервере мы ловим сие ошибки

185
Итератор с методами класса

Итератор с методами класса

У меня есть класс FileSystem, и я хочу хочу сделать, чтобы с итераторов можно было выполнять некоторые методы самого классаДля этого в итератор...

342
Unhandled access violation exception

Unhandled access violation exception

Добрый деньЕсть следующий код на c++(среда - Visual Studio 2013):

311