PHP.SU

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

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

> Найдено сообщений: 19
mindcraft Отправлено: 11 Ноября, 2011 - 16:39:21 • Тема: Цикл foreach в обработке результатов simplexml_load_string • Форум: Вопросы новичков

Ответов: 8
Просмотров: 343
Сделал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. ...
  3. $xml = simplexml_load_string($data);
  4. var_dump($xml->Data->Movies->Movie);
  5. ...
  6.  


Результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1. NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL... много раз
  2. object(SimpleXMLElement)#3 (6) { ["@attributes"]=> array(1) { ["ID"]=> string(3) "343" } ["Name"]=> object(SimpleXMLElement)#2 (0) { } ["Duration"]=> string(12) "1С‡ 50РјРёРЅ" ["Remark"]=> object(SimpleXMLElement)#5 (0) { } ["Picture"]=> object(SimpleXMLElement)#6 (0) { } ["Properties"]=> object(SimpleXMLElement)#7 (0) { } }
  3. NULL
mindcraft Отправлено: 11 Ноября, 2011 - 15:53:18 • Тема: Цикл foreach в обработке результатов simplexml_load_string • Форум: Вопросы новичков

Ответов: 8
Просмотров: 343
Такая проблема:
есть удаленный сервер к котором отправляю сокетами запросы и получаю ответы в xml.
Вот пример ответа:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version='1.0' encoding='Windows-1251' standalone='yes'?><XML><Result>Ok</Result><Error></Error><Remark></Remark><Data><Movies><Movie ID='343'><Name><![CDATA[Мальчики - налетчики]]></Name><Duration Duration='110'>1ч 50мин</Duration><Remark><![CDATA[]]></Remark><Picture><![CDATA[]]></Picture><Properties></Properties></Movie><Movie ID='339'><Name><![CDATA[Пила 3D]]></Name><Duration Duration='90'>1ч 30мин</Duration><Remark><![CDATA[]]></Remark><Picture><![CDATA[]]></Picture><Properties></Properties></Movie><Movie ID='341'><Name><![CDATA[Союз зверей 3D]]></Name><Duration Duration='90'>1ч 30мин</Duration><Remark><![CDATA[]]></Remark><Picture><![CDATA[]]></Picture><Properties></Properties></Movie></Movies></Data></XML>


Вот функция для его получения и обработки:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function GetMovies(){
  2.         $fmov = fsockopen("192.168.200.1", 9194, $errno, $errstr, 30);
  3.         if(!$fmov){
  4.                 echo "$errstr ($errno)<br> ";
  5.         }
  6.         else{
  7.                 $wait = true;
  8.                 $query = "запрос к серверу";
  9.                 stream_set_blocking($fmov, 0);
  10.                         fwrite($fmov, $query);
  11.                         while (!feof($fmov)){
  12.                                 $r = fgets($fmov);                                                     
  13.                                 //echo $r;
  14.  
  15. $data = substr($r, 11);
  16. //echo $data;
  17. $xml = simplexml_load_string($data);
  18. foreach($xml->Data->Movies->Movie as $movie){
  19.         //print_r($movie);
  20.         foreach($movie->Name as $name){
  21.                 echo $name."<br>";
  22.         }
  23. }
  24.  
  25.                                 if (!strcmp($r, "")){
  26.                                         if (!$wait){
  27.                                                 break;
  28.                                         }
  29.                                 }
  30.                                 else{
  31.                                         $wait = false;
  32.                                 }
  33.                         }
  34.                         fclose($fmov);
  35.         }
  36. }


В результате работы функции получаю огромное количество строк вида "Warning: Invalid argument supplied for foreach() in X:\home\kino.new\www\common.php on line 53" (строка 53: foreach($xml->Data->Movies->Movie as $movie){)
и где-то в конце страницы, перед последним предупреждением получаю необходимый ответ с выводом фильмов. Обработка функции занимает очень много времени.
Не могу понять в чем проблема!
Заранее спасибо за любую помощь.
mindcraft Отправлено: 09 Сентября, 2010 - 13:03:53 • Тема: Вложенные циклы • Форум: Программирование на PHP

Ответов: 4
Просмотров: 741
Нашел ошибку.
Точнее, понял, как это сделать правильно:
PHP:
скопировать код в буфер обмена
  1. for($n=0;$n<2;$n++) {
  2. for($i=1;$i<=11;$i++) {
  3. }
  4. }

До этого, очевидно, тупил Улыбка
mindcraft Отправлено: 09 Сентября, 2010 - 12:40:35 • Тема: Вложенные циклы • Форум: Программирование на PHP

Ответов: 4
Просмотров: 741
Здравствуйте!
Хочу попросить совета в след. задаче:
Есть некоторое кол-во пунктов меню на сайте. Разным пунктам назначаются разные стили (css). Стилей 11, а пунктов становится больше... Прежде был простой цикл увеличивающий переменную до 11, затем эта переменная выводилась, как класс пункта меню:

вывод
CODE (html):
скопировать код в буфер обмена
  1. <div class='menu'><a class='m\$i' href='%URL'>%NAME</a></div>

Теперь же необходимо увеличивать кол-во пунктов меню, не увеличивая кол-во стилей.
Т.е. вместо простого цикла указанного выше нужен цикл считающий $i до 11, а потом начинающий заново...
Пробовал:
PHP:
скопировать код в буфер обмена
  1.  
  2. for ($i = 1; $i<50 ; $i++) {
  3.         if ($i > 11) {
  4.                 for ($i = 1; $i<11 ; $i++) {
  5.                 if ($i=11) break;
  6.                 }
  7.         }
  8. }
  9.  

Естественно не работает, а сообразить где ошибка не могу.
Заранее спасибо за помощь.

Страниц (2): « 1 [2]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB