Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: И снова пустой массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
drfreud
Отправлено: 22 Января, 2014 - 15:38:57
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Доброго всем времени суток!
Простенький код:
PHP:
скопировать код в буфер обмена
  1. $inptData = " <shape>
  2.            <appearance>
  3.              <material diffuseColor='0.3412 0.8824 0.7765'></material>
  4.            </appearance>
  5.            <indexedFaceSet>
  6.              <coordinate USE='Verticals-COORD'></coordinate>
  7.            </indexedFaceSet>
  8.          </shape>
  9.          <shape>
  10.            <appearance>
  11.              <material diffuseColor='0.3412 0.8824 0.7765'></material>
  12.            </appearance>
  13.            <indexedFaceSet>
  14.              <coordinate USE='Verticals-COORD'></coordinate>
  15.            </indexedFaceSet>
  16.          </shape>
  17.          <shape>
  18.            <appearance>
  19.              <material diffuseColor='0.3412 0.8824 0.7765'></material>
  20.            </appearance>
  21.            <indexedFaceSet>
  22.              <coordinate USE='Verticals-COORD'></coordinate>
  23.            </indexedFaceSet>
  24.          </shape>";
  25. preg_match_all('%<shape>.*?</shape>%ms', $inptData, $outpArr);
  26. print_r($outpArr);

Выдает:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Array ( [0] => Array ( [0] => [1] => [2] => ) )

Сам код выглядит в данном случае бесполезным, но он нужен для дальнейшего парсинга файла (файл - 3D модель в формате .x3d). Никак не могу понять почему массив пуст, тогда как совпадения вроде находятся (с увеличением количества блоков <shape>...</shape> увеличивается количество элементов массива, но они все равно пусты). Буду очень признателен толковому совету, к сожалению парсер раньше писать не доводилось, потому прошу о помощи.
 
 Top
Panoptik
Отправлено: 22 Января, 2014 - 15:44:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а вы не смотрите в браузер а в исходный код страницы


-----
Just do it
 
 Top
drfreud
Отправлено: 22 Января, 2014 - 15:52:45
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Спасибо!))) Как бы это сказать, мое невежество не знает границ!))) Но будем заполнять пробелы.
В исходном коде страницы:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => <shape>
  6.             <appearance>
  7.               <material diffuseColor='0.3412 0.8824 0.7765'></material>
  8.             </appearance>
  9.             <indexedFaceSet>
  10.               <coordinate USE='Verticals-COORD'></coordinate>
  11.             </indexedFaceSet>
  12.           </shape>
  13.             [1] => <shape>
  14.             <appearance>
  15.               <material diffuseColor='0.3412 0.8824 0.7765'></material>
  16.             </appearance>
  17.             <indexedFaceSet>
  18.               <coordinate USE='Verticals-COORD'></coordinate>
  19.             </indexedFaceSet>
  20.           </shape>
  21.             [2] => <shape>
  22.             <appearance>
  23.               <material diffuseColor='0.3412 0.8824 0.7765'></material>
  24.             </appearance>
  25.             <indexedFaceSet>
  26.               <coordinate USE='Verticals-COORD'></coordinate>
  27.             </indexedFaceSet>
  28.           </shape>
  29.         )
  30. )

что собственно и требовалось! А не подскажите, это особенность поведения функции print_r или что?
 
 Top
Panoptik
Отправлено: 22 Января, 2014 - 15:58:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




это поведение браузера. он видит теги xml и пытается их отрисовать в не зависимости от того что в них внутри и как именно эти теги именуются


-----
Just do it
 
 Top
peters
Отправлено: 22 Января, 2014 - 15:59:14
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Янв. 2014  


Помог: 7 раз(а)




 
 Top
Panoptik
Отправлено: 22 Января, 2014 - 16:01:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




peters

так будет ошибка
peters пишет:
print_r(htmlspecialchars($outpArr));


htmlspecialchars должна принимать строку а получит массив. нужно доп обработка чтобы вывести такой результат как вы думали, ну впрочем это всего лишь форматирование вывода. результат то он лежит в переменной и с ним уже ТС пускай делает что вздумается

можно сделать вот так

(Отредактировано автором: 22 Января, 2014 - 16:08:19)



-----
Just do it
 
 Top
drfreud
Отправлено: 22 Января, 2014 - 16:12:30
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Спасибо! Теперь ясно хоть в чем косяк состоял. Вообще данный код родился после мучений с функцией preg_replace. В общем виде задача заключается в следующем:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <shape>
  2.             <appearance>
  3.               <material diffuseColor='0.3412 0.8824 0.7765'></material>
  4.             </appearance>
  5.             <indexedFaceSet coordIndex='6 2 1 -1 1 0 6 -1 8 10 9 -1 9 7 8 -1 11 5 4 -1 4 3 11 -1 13 15 14 -1 14 12 13 -1'>
  6.               <coordinate DEF='Verticals-COORD' point='68 8 -528.8 68 8 -31.2 68 733 -31.2 1150 8 -528.8 1150 8 -31.2 1150 733 -31.2 68 733 -528.8 50 8 -528.8 50 8 -31.2 50 733 -528.8 50 733 -31.2 1150 733 -528.8 1132 8 -528.8 1132 8 -31.2 1132 733 -528.8 1132 733 -31.2'></coordinate>
  7.               <textureCoordinate DEF='Verticals-TEXCOORD' point='749.3 -358 251.7 -358 251.7 367 749.3 -358 251.7 -358 251.7 367 749.3 367 -748.3 -358 -250.7 -358 -748.3 367 -250.7 367 749.3 367 -748.3 -358 -250.7 -358 -748.3 367 -250.7 367'></textureCoordinate>
  8.             </indexedFaceSet>
  9.           </shape>
  10.           <shape>
  11.             <appearance>
  12.               <material diffuseColor='0.3412 0.8824 0.7765'></material>
  13.             </appearance>
  14.             <indexedFaceSet>
  15.               <coordinate USE='Verticals-COORD'></coordinate>
  16.             </indexedFaceSet>
  17.           </shape>

в данном куске кода видно, что есть 2 блока shape'ов, но в одном есть координаты, а в другом их нет, суть в том, чтобы убрать из кода все блоки shape без координат, просто заменить их пустой строкой. Но поскольку как я уже писал здесь, я ранее практически не сталкивался с парсингом и регулярками, то написать это в одну строку у меня не вышло и я решил сначала разбить файл на shape'ы, а затем уже в каждом отдельно искать "пустые" и удалять их из массива. В данном случае искать по наличию сочетания USE= поскольку ссылки на координаты есть только в пустых блоках. Если сообщество предложит вариант решения данной задачи в одну строку буду очень признателен, ну и может просто кого-то заинтересует решение.
 
 Top
Мелкий Супермодератор
Отправлено: 22 Января, 2014 - 18:02:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




drfreud пишет:
в данном куске кода видно

... что это XML и потому парсить его регулярками - глупость.
Используйте simplexml.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB