Подскажите как брать ошибку!? PHP warning: Invalid argument supplied for foreach()
Добрый вечер!
Пытаюсь спарсить XML фаил с помощью catalogfill вроде в логах показывает массив но не добавляет их в TV:
[0] => Array
(
[] => Array
(
[0] => true
[1] => opt.globusceramica.ru/catalog/grespania/alabaster/13/
[2] => 3790
[3] => RUR
[4] => 96
[5] => 45x120
[6] => Глянцевая
[7] => Мрамор
[8] => Бежевый
[9] => 45
[10] => м2
[11] => 5830
)
[tv1] => opt.globusceramica.ru/upload/iblock/cd3/1ntxgpep3rui5c6xajqg8f14clrrltqw.jpg
[pagetitle] => ALABASTER ALABASTER BEIGE 45х120
)
Кусок из XML фаила именно параметры с названием не хочет
Ошибку выдает в этом месте foreach($node as $k => $v) {:
Пытаюсь спарсить XML фаил с помощью catalogfill вроде в логах показывает массив но не добавляет их в TV:
[0] => Array
(
[] => Array
(
[0] => true
[1] => opt.globusceramica.ru/catalog/grespania/alabaster/13/
[2] => 3790
[3] => RUR
[4] => 96
[5] => 45x120
[6] => Глянцевая
[7] => Мрамор
[8] => Бежевый
[9] => 45
[10] => м2
[11] => 5830
)
[tv1] => opt.globusceramica.ru/upload/iblock/cd3/1ntxgpep3rui5c6xajqg8f14clrrltqw.jpg
[pagetitle] => ALABASTER ALABASTER BEIGE 45х120
)
Кусок из XML фаила именно параметры с названием не хочет
<param name="Размер"45x120</param>
Кусок из XML<offer id="14" available="true">
<currencyId>RUR</currencyId>
<categoryId>96</categoryId>
<picture>http://opt.globusceramica.ru/upload/iblock/ef2/c26wewu3mp4gqubj539u1n5i7s304o4u.jpg</picture>
<name>ALABASTER ALABASTER TEBAS 45х120</name>
<param name="Размер">45x120</param>
<param name="Поверхность">Глянцевая</param>
<param name="Рисунок">Мрамор</param>
<param name="Color">Бежевый</param>
<param name="РРЦ">9999</param>
</offer>
Ошибку выдает в этом месте foreach($node as $k => $v) {:
* Переводит XML объект в массив, сохраняет значения и их xpath
*
*/
public function parceXML($xmlObject, $out=array(), $level=0){
//foreach($xmlObject->attributes() as $a => $b) {
// echo $a,'="',$b,"\"\n";
//}
foreach ((array) $xmlObject as $key => $node){
//Атрибуты элемента
if($key=='@attributes'){
foreach($node as $k => $v) {
$this->keys[1][] = '@attributes.'.$k;
$this->values[] = trim($v);
}
continue;
}
if(is_object($node) || is_array($node)){
//var_dump(count($this->keys[0]),$level,$key,implode('/',$this->keys[0]));
//var_dump(implode('/',$this->keys[0])); echo "\n\n";
//убираем с конца массива ключей значения, которые не соответствуют текущему уровню вложенности
if(/*$level > 0 && */count($this->keys[0]) > $level){
$this->keys[0] = $this->array_mpop($this->keys[0],(count($this->keys[0]) - $level));
}else{
$level = count($this->keys[0]);
}
if(!is_numeric($key)) $this->keys[0][] = trim($key);
$out[$key] = $this->parceXML($node,$out,$level+1);
}else{
$this->keys[1][] = implode('/',array_merge($this->keys[0],array($key)));
$this->values[] = trim($node);
$out[$key] = trim($node);
}
}
return $out;
}
Подскажите где исправить!?Комментарии: 5
В описании ошибки должна быть ссылка на файл и сроку в нём.
Ошибка как раз показывает на фаил и в нем строка 1668 ошибка
//Атрибуты элемента
if($key=='@attributes'){
foreach($node as $k => $v) {
$this->keys[1][] = '@attributes.'.$k;
$this->values[] = trim($v);
if($key=='@attributes' && is_array($node)){
foreach($node as $k => $v) {
$this->keys[1][] = '@attributes.'.$k;
$this->values[] = trim($v);
Ошибка вроде ушла… все равно параметры не парсит ((
Так а с чего бы он их начал парсить, если их нет или они в неподходящем для парсинга формате? У вас и ошибки не было, было предупреждение, что вы передаёте в функцию foreach не массив. Я показал как сделать проверку, чтобы предупреждение ушло, но цикл-то от этого не запустился. Надо разбираться что лежит в $node и исходя из этого корректировать код.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.