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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Andruxa
Отправлено: 08 Февраля, 2011 - 22:07:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Итак задача.
Есть url: http://suncity[dot]combats[dot]com/inf[dot]p[dot][dot][dot]_Elf&short=1
Задача разобрать всю информацию по этой ссылке в нужном мне виде.

По детски я делал так Улыбка
PHP:
скопировать код в буфер обмена
  1. $url="http://suncity.combats.com/inf.pl?login=".$_POST['login']."&short=1";
  2. $arr=file_get_contents($url);
  3. //далее разбиваю построчно:
  4. $arr1=explode("\n", $arr);
  5. foreach($arr1 as $key=>$value){ // это для себя для наглядности
  6. echo $key."=>".$value."<br>"; // $key вывожу для себя

Отображается в следующем виде:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 0=>login=MAG_Elf
  2. 1=>login_online=1
  3. 2=>id=1147855434
  4. 3=>align=0
  5. 4=>zodiac=8
  6. 5=>img=25
  7. 6=>gamecity=Suncity


написал маленкую функцию:
PHP:
скопировать код в буфер обмена
  1. function splits($arr){
  2.     $raz=explode("=", $arr);
  3.     echo"<b>".$raz[1]."</b>";
  4.     }
  5. //И вывожу нужный мне параметр так:
  6. echo splits($arr1[0]);


Все бы ничего, но тут такой момент, если игрок зашел то у него в массиве появляется элемент login_online=1, если он офф. то этого элемента нет. А если он еще и в бою, то появляется еще один элемент battle_id=1297194310.09728 т.е в разных случаях массив имеет разное количество значений и мой способ вывода параметров будет некорректный.
Поэтому мне кажется что тут лучше применить регулярные выражения, но так как с ними пока не дружу совсем Улыбка решил обратиться к Вам за помощью. Или посоветуйте в каком направлении мне дальше действовать.
 
 Top
OrmaJever Модератор
Отправлено: 08 Февраля, 2011 - 22:18:37
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Andruxa пишет:
и мой способ вывода параметров будет некорректный.

почему?
PHP:
скопировать код в буфер обмена
  1. function splits($arr){
  2.     foreach($arr as $v)
  3.     {
  4.       list($key, $val) = explode("=", $v);
  5.       $array[$key] = $val;
  6.     }
  7.     return $array;
  8.     }

и вернёт асоциативный масив.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Andruxa
Отправлено: 08 Февраля, 2011 - 22:29:01
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Если я загружаю по этой ссылке информацию персонажа который в двнный момент находится в статусе офф. , то да своим примером я все загружу что мне надо.
Т.е например вывожу параметр силы echo splits($arr1[9]); (который например будет=3)
А если я считываю когда персонаж в статусе онлайн, то $arr1[9] уже будет равен не параметру силы, а статусу онлайн ( а сила в этом случае =$arr1[10]) . Т.е при заходе в онлайн, массив сдвигается на +1, а если персонаж еще и в бою, то еще на +1.
 
 Top
OrmaJever Модератор
Отправлено: 08 Февраля, 2011 - 22:50:38
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




PHP:
скопировать код в буфер обмена
  1. $x = splits($arr);
  2. echo $x['str']; // или другой индекс


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Andruxa
Отправлено: 08 Февраля, 2011 - 23:12:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




OrmaJever Огромаднейшее спасибо!!! Все работает так как надо!!!
Но работает с $arr1, т.е

Если не трудно распишите словами подробнее эту функцию:
PHP:
скопировать код в буфер обмена
  1. function splits($arr){
  2.     foreach($arr as $v)
  3.     {
  4.       list($key, $val) = explode("=", $v);
  5.       $array[$key] = $val;
  6.     }
  7.     return $array;
  8.     }
  9. // и вот это
  10. $x = splits($arr);
  11. echo $x['str'];

(Отредактировано автором: 08 Февраля, 2011 - 23:14:05)

 
 Top
Andruxa
Отправлено: 09 Февраля, 2011 - 19:44:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Разбираю дальше...
в $x['reputations'] находится следующее:
CODE (htmlphp):
скопировать код в буфер обмена
  1. title:Angels city,dsc:Рыцарь первого круга,img:misc/zn2_1.gif|title:Demons city,dsc:Рыцарь первого круга,img:misc/zn3_1.gif|title:Mooncity,dsc:Рыцарь первого круга,img:misc/zn9_1.gif|title:Sandcity,dsc:Рыцарь первого круга,img:misc/zn7_1.gif|title:Suncity,dsc:Рыцарь первого круга,img:misc/zn5_1.gif|title:Храм Знаний,dsc:Посвященный первого круга,img:misc/znrune_1.gif|

Мне нужно вытащить отсюда имена картинок.
PHP:
скопировать код в буфер обмена
  1. $dd= explode("|",$x['reputations']);    
  2.     foreach($dd as $key=>$value){
  3.         echo $key."=>".$value."<br>";
  4.     }

Вот тут засада, появляется какой то лишний элемент:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 0=>title:Angels city,dsc:Рыцарь первого круга,img:misc/zn2_1.gif
  2. 1=>title:Demons city,dsc:Рыцарь первого круга,img:misc/zn3_1.gif
  3. 2=>title:Mooncity,dsc:Рыцарь первого круга,img:misc/zn9_1.gif
  4. 3=>title:Sandcity,dsc:Рыцарь первого круга,img:misc/zn7_1.gif
  5. 4=>title:Suncity,dsc:Рыцарь первого круга,img:misc/zn5_1.gif
  6. 5=>title:Храм Знаний,dsc:Посвященный первого круга,img:misc/znrune_1.gif
  7. 6=>

Как избавится от пустого элемента №6 ? Можно ли простым unset это решить ?
 
 Top
OrmaJever Модератор
Отправлено: 09 Февраля, 2011 - 20:15:43
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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






-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Andruxa
Отправлено: 09 Февраля, 2011 - 21:12:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




OrmaJever Спасибо за подсказку, все получилось Улыбка

А теперь самое страшное для меня.
Теперь мне нужно разобрать то во что одет персонаж, т.е вот отсюда:
Цитата:
0=>login=MAG_Elf
1=>login_online=1
2=>id=1147855434
3=>align=0
4=>zodiac=8
5=>img=25
6=>gamecity=Suncity
.....и т.д. ......

27=>objects=clips1024=Серьги Стального Ящера\nУровень жизни: +105\nДолговечность: 32/34,amulet1024=Амулет Стального Ящера\nУровень жизни: +142\nДолговечность: 32/34,sword1024=Меч вечного путешественника\nУдар: 12 - 36\nУровень жизни: +63\nДолговечность: 17/19,body1024=Броня Стального Ящера\nУровень жизни: +209\nБроня корпуса: 19-72 (18+d54)\nДолговечность: 32/47,belt10210=Отменный пояс беспощадного предка\nУровень жизни: +106\nБроня пояса: 9-32 (8+d24)\nДолговечность: 10/18,ring1024=Кольцо Стального Ящера\nУровень жизни: +58\nДолговечность: 29/34,ring1024=Кольцо Стального Ящера\nУровень жизни: +58\nДолговечность: 32/34,ring1024=Кольцо Стального Ящера\nУровень жизни: +58\nДолговечность: 20/34,head1024=Шлем Стального Ящера\nУровень жизни: +107\nБроня головы: 15-57 (14+d43)\nДолговечность: 31/47,sword1051=Sword of Suppression\nУдар: 12 - 36\nДолговечность: 51/67,hands1043=Перчатки Быстрой Расплаты\nУровень жизни: +100\nДолговечность: 31/43,boots1043=Сапоги Быстрой Расплаты\nУровень жизни: +55\nБроня ног: 8-27 (7+d20)\nДолговечность: 46/64,arms10210=Надежные наручи неистового предателя\nУровень жизни: +126\nДолговечность: 10/18,legs1024=Поножи Стального Ящера\nУровень жизни: +103\nБроня пояса: 9-32 (8+d24)\nБроня ног: 7-25 (6+d19)\nДолговечность: 34/54

А именно то, что выделил жирным. То что выделил - это имена картинок, вот их мне нужно вытащить. Методом которым я все вытаскивал выше не получается, если честно вообще нет никаких мыслей, нужна помощь! Тут наверное точно без регулярных выражений никак.
 
 Top
OrmaJever Модератор
Отправлено: 09 Февраля, 2011 - 21:51:31
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Смело могли создавать тему в разделе "Напишите за меня" Подмигивание
Некоторые задачи легче чем кажутся! главное найти закономерность Улыбка
PHP:
скопировать код в буфер обмена
  1. $str = "27=>objects=clips1024=Серьги Стального Ящера\nУровень жизни: +105\nДолговечность: 32/34,amulet1024=Амулет Стального Ящера\nУровень жизни: +142\nДолговечность: 32/34,sword1024=Меч вечного путешественника\nУдар: 12 - 36\nУровень жизни: +63\nДолговечность: 17/19,body1024=Броня Стального Ящера\nУровень жизни: +209\nБроня корпуса: 19-72 (18+d54)\nДолговечность: 32/47,belt10210=Отменный пояс беспощадного предка\nУровень жизни: +106\nБроня пояса: 9-32 (8+d24)\nДолговечность: 10/18,ring1024=Кольцо Стального Ящера\nУровень жизни: +58\nДолговечность: 29/34,ring1024=Кольцо Стального Ящера\nУровень жизни: +58\nДолговечность: 32/34,ring1024=Кольцо Стального Ящера\nУровень жизни: +58\nДолговечность: 20/34,head1024=Шлем Стального Ящера\nУровень жизни: +107\nБроня головы: 15-57 (14+d43)\nДолговечность: 31/47,sword1051=Sword of Suppression\nУдар: 12 - 36\nДолговечность: 51/67,hands1043=Перчатки Быстрой Расплаты\nУровень жизни: +100\nДолговечность: 31/43,boots1043=Сапоги Быстрой Расплаты\nУровень жизни: +55\nБроня ног: 8-27 (7+d20)\nДолговечность: 46/64,arms10210=Надежные наручи неистового предателя\nУровень жизни: +126\nДолговечность: 10/18,legs1024=Поножи Стального Ящера\nУровень жизни: +103\nБроня пояса: 9-32 (8+d24)\nБроня ног: 7-25 (6+d19)\nДолговечность: 34/54";
  2. preg_match_all('#\d+/\d+,(.+?)=#ism', $str, $r);
  3. print_r($r[1]);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Andruxa
Отправлено: 09 Февраля, 2011 - 22:14:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




OrmaJever еще раз спасибо, вроде все ищет что надо Улыбка
Цитата:
Некоторые задачи легче чем кажутся! главное найти закономерность
Это точно, иногда такое напридумаю, что самому страшно становится, а когда подскажут то решение как всегда простое оказывается Улыбка. Я пока не научился мыслить как программист, я только учусь Улыбка
 
 Top
JustUserR
Отправлено: 10 Февраля, 2011 - 15:37:24
Post Id



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


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


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




Andruxa пишет:
А когда подскажут то решение как всегда простое оказывается
В общем случае указанное решения для предполагаемой задачи является корректным но не осуществляет включение проверки уровня трактования полученных информационных полей относительно кодовой таблицы - дело в том что при осуществлении переноса указанного PHP-приложения на новый web-сервер не всегда возможно обеспечения его корректной работы - по причине отсутствия рассмотрения парамета загружаемого HTTP-документа на предмет включенного значения соответствующей кодовой таблицы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Andruxa
Отправлено: 13 Февраля, 2011 - 18:23:22
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Подскажите, что не так?


PHP:
скопировать код в буфер обмена
  1. $url="http://suncity.combats.com/inf.pl?login=".$_POST['login']."&short=1";
  2. $arr=file_get_contents($url);
  3. //echo $arr; // Этот массив полон.
  4.  
  5. preg_match("#log(.*?)reputations#si",$arr, $test);
  6. echo $test[1];// Почему он иногда бывает пуст ???


Ищу в этом куске:
Цитата:
login=MAG_Elf login_online=1 id=1147855434 align=0 zodiac=8 img=25 gamecity=Suncity gamecity_url=http://suncity[dot]combats[dot]com room_name=Зал воинов 3 level=10 vicrory=18136 defeat=4623 withdraw=77 name=Elf sex=0 dex=3 str=20 inst=145 power=58 _dex=3 _str=20 _inst=97 _power=58 birthplace=Sandcity date_registry=17.05.06 19:43 pet_type=owl pet_level=6 pet_name=Валькирия reputations=


Вопрос такой, почему когда я подставляю разные логины, то массив $test[1] иногда бывает пуст, а иногда все нормально работает ?
Есть ли какие то ограничения использования рег. выражений в одном скрипте ?
 
 Top
JustUserR
Отправлено: 14 Февраля, 2011 - 13:24:29
Post Id



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


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


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




Andruxa пишет:
Вопрос такой, почему когда я подставляю разные логины, то массив $test[1] иногда бывает пуст, а иногда все нормально работает ?
Возможной причиной осуществления нестабильной работы предполагаемого PHP-приложения является использование в качестве средства базы данных не обесчивающих разделение уровня трактования информационных полей и управляющих объектов - таким образом в процессе выполнения сопоставления регулярного выражения возможно выделение элементов в некорректных позициях в силу неоднородности анализируемого содержимого


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Andruxa
Отправлено: 24 Февраля, 2011 - 16:34:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Подскажите что не так.
Вывод нескольких персонажей с информацией:
PHP:
скопировать код в буфер обмена
  1. echo"<table  border=1 width=70%>";
  2. $array_login=array("MAG_Elf", "Сэнсей", "Sony Bono", "Dylin");
  3. foreach($array_login as $value){    
  4. $login=str_replace(" ", "%20",$value);  
  5. $url="http://suncity.combats.com/inf.pl?login=".$login."&short=1";
  6. $infa=file_get_contents($url);
  7. $inf=explode("\n", $infa);
  8. foreach($inf as $vv){
  9.     list($x,$y)=explode("=",$vv);
  10.     $info[$x]=$y;
  11. }
  12. //var_dump($info);
  13. echo"<tr>
  14. <td>".$info['login']."</td>
  15. <td>".$info['login_online']."</td>
  16. <tr>";
  17. }
  18. echo"</table>";


в стр. под №15 я хочу вывести состояние пользователя (online/offline), но тут какая то абракадабра получается, если первый персонаж ( в данном случае MAG_Elf) в сети, то почему то и всем остальным присвоивается такоеже значение, т.е info['login_online']=1, хотя на самом деле он только один в сети.
Не могу понять почему это происходит ?
 
 Top
Okula
Отправлено: 24 Февраля, 2011 - 17:57:12
Post Id



Участник


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


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




Andruxa, для начала вот это убери

И поставь это


Мне кажется у тебя многовато вложенных циклов. Думаю можно реализовать это куда лучше, правда голова плохо сейчас варит. Улыбка
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB