[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите написать регулярку
ArtemKrass
Всем привет!
Как из этой строки:

"55":{"id":19410,"name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \u0432 21:47","looted":1342460546},"56":{"id":19411,"name":"\u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":680,"oy":234,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}


выбрать значения "id", "name" и "relation_status"?


preg_match_all ('#"id":([0-9]+),"name":"([^"]+)#i')

Так я получаю Id и name...
А вот как еще здесь же получить "relation_status"???

Пробовал так:

preg_match_all ('#"id":([0-9]+),"name":"([^"]+).*"relation_status":([0-9]+)#i')

Но получаю не то, что нужно...

Json_decode не подходит...



Спустя 2 часа, 5 минут, 13 секунд (17.07.2012 - 17:09) MrSecurity написал(а):
Цитата
preg_match_all ('#"id":([0-9]+),"name":"([^"]+).*"relation_status":([0-9]+)#i')

попробуй вот так:
preg_match_all ('#"id":([0-9]+),"name":"([^"]+).*","relation_status":([0-9]+)#i')

а зачем решотка я так и не понял wink.gif

Спустя 3 минуты, 57 секунд (17.07.2012 - 17:13) Игорь_Vasinsky написал(а):
Следи за ходом мысли:

$str = '"55":{"id":19410,"name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d","dir":"n","expansion_stage":3,"x":788,"y" :648,"ox":472,"oy":147,"offer":"wood",
"demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \u0432 21:47","looted":1342460546},"56":{"id":19411,"name":"\u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":3,"x":788,"y" :648,"ox":680,"oy":234,
"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}'
;

$json_str = '{'.$str.'}';

$json = json_decode($json_str, true);

echo '<pre>' . print_r($json, 1) . '</pre>';


Свернутый текст
Array
(
[55] => Array
(
[id] => 19410
[name] => Гагавтаэ
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 472
[oy] => 147
[offer] => wood
[demand] => stone
[mood] => 100
[relation_status] => 1
[ratio] => 1.25
[loot] => 1342460846
[lootable_human] => 16.07.12 в 21:47
[looted] => 1342460546
)

[56] => Array
(
[id] => 19411
[name] => Когахидрэй
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 680
[oy] => 234
[offer] => stone
[demand] => wood
[mood] => 100
[relation_status] => 0
[ratio] => 1.25
)

)

В итоге:

foreach($json as $data)
{
echo 'id: '.$data['id'].', name: '.$data['name'].', relation_status: '.$data['relation_status'].'<br />';
}


и вывод:

id: 19410, name: Гагавтаэ, relation_status: 1
id: 19411, name: Когахидрэй, relation_status: 0

Спустя 35 секунд (17.07.2012 - 17:14) Игорь_Vasinsky написал(а):
MrSecurity
а решётка - это делемитеры паттерна регулярного выражения в данном случае wink.gif

Спустя 5 минут, 43 секунды (17.07.2012 - 17:20) Игорь_Vasinsky написал(а):
кстати если уж работа с юникод строкой - то модификатор u не помешает smile.gif

Спустя 27 минут, 17 секунд (17.07.2012 - 17:47) ArtemKrass написал(а):
Ход мысли понятен... Я просто не могу из всего кода, который присылает мне сервер, выбрать нужный мне кусок с Json, если бы мне это удалось, проблема бы была решена...

Вот ответ сервера:
http://narod.ru/disk/56515222001.d06c63ea8...2/Json.doc.html

А мне нужно из всего этого кода забрать 8 строчек, где есть ID, Name и Relation_status и взять их значения...

Спустя 6 минут, 10 секунд (17.07.2012 - 17:53) Игорь_Vasinsky написал(а):
блин.. ты бы ещё pdf на deposite выложил biggrin.gif

Спустя 1 минута, 18 секунд (17.07.2012 - 17:54) ArtemKrass написал(а):
Блин, ну если кодом писать, он в одну строку все выводит... Нечитаемо)))

Есть ли выход??? Я уже замучался...

Спустя 14 секунд (17.07.2012 - 17:55) Игорь_Vasinsky написал(а):
дай txt

Спустя 11 минут, 14 секунд (17.07.2012 - 18:06) ArtemKrass написал(а):

Спустя 8 минут, 23 секунды (17.07.2012 - 18:14) Игорь_Vasinsky написал(а):
$str = '"55":{"id":19410,"name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d","dir":"n","expansion_stage":3,"x":788,"y"  :648,"ox":472,"oy":147,
"offer":"wood","demand":&quo t;stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,
"lootable_human":"16.07.12 \u0432 21:47","looted":1342460546},"56":{"id":19411,"name":"\u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439",
"dir":"n","expansion_stage":3,"x":788,"y" :648,"ox":680,"oy":234,"offer":"stone",
"demand":"wood","moo d":100,"relation_status":0,"ratio":1.25}'
;

preg_match_all("#\"id\"\:([0-9]+)#usU", $str, $ids);
preg_match_all("#\"name\"\:\"([^\"].+)\"#usU", $str, $names);
preg_match_all("#\"relation_status\"\:([0-9]+)#usU", $str, $relation_status);

echo '<pre>' . print_r($ids, 1) . '</pre>';
echo '<pre>' . print_r($names, 1) . '</pre>';
echo '<pre>' . print_r($relation_status, 1) . '</pre>';


Array
(
[0] => Array
(
[0] => "id":1
[1] => "id":1
)

[1] => Array
(
[0] => 1
[1] => 1
)

)
Array
(
[0] => Array
(
[0] => "name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d"
[1] => "name":"\u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439"
)

[1] => Array
(
[0] => \u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d
[1] => \u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439
)

)
Array
(
[0] => Array
(
[0] => "relation_status":1
[1] => "relation_status":0
)

[1] => Array
(
[0] => 1
[1] => 0
)

)

Спустя 1 час, 19 минут, 6 секунд (17.07.2012 - 19:33) ArtemKrass написал(а):
Я видимо не правильно объяснил...
В общем мне нужно из всего этого:
http://phpforum.ru/html/counter/counter.ph...9/Json.txt.html

Выбрать это:
"54\":{\"id\":19409,\"name\":\"\\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\\u043e\\u043d\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":629,\"oy\":170,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342173457,\"lootable_human\":\"13.07.12 \\u0432 13:57\",\"looted\":1342173157},\"55\":{\"id\":19410,\"name\":\"\\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\\u044d\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":472,\"oy\":147,\"offer\":\"wood\",\"demand\":\"stone\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342460846,\"lootable_human\":\"16.07.12 \\u0432 21:47\",\"looted\":1342460546},\"56\":{\"id\":19411,\"name\":\"\\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\\u0440\\u044d\\u0439\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":680,\"oy\":234,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25},\"57\":{\"id\":19412,\"name\":\"\\u0422\\u0430\\u0445\\u0438\\u0433\\u0430\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":694,\"oy\":296,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25},\"58\":{\"id\":19413,\"name\":\"\\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\\u044d\",\"dir\":\"n\",\"expansion_stage\":4,\"x\":788,\"y\":648,\"ox\":278,\"oy\":208,\"offer\":\"stone\",\"demand\":\"iron\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342460843,\"lootable_human\":\"16.07.12 \\u0432 21:47\",\"looted\":1342460543},\"59\":{\"id\":19414,\"name\":\"\\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\\u0444\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":228,\"oy\":265,\"offer\":\"wood\",\"demand\":\"iron\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342173456,\"lootable_human\":\"13.07.12 \\u0432 13:57\",\"looted\":1342173156},\"60\":{\"id\":19415,\"name\":\"\\u041d\\u044d\\u0439\\u0440\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":589,\"oy\":365,\"offer\":\"iron\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25},\"61\":{\"id\":19416,\"name\":\"\\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\\u0441\\u043a\\u043e\\u0443\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":772,\"oy\":274,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25}

т.е. те строки, где есть relation_status

И на выходе получить примерно это:

19409 - \\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\\u043e\\u043d\\u043e\\u0441 - 1
19410 - \\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\\u044d - 1
19411 - \\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\\u0440\\u044d\\u0439 - 0
19412 - \\u0422\\u0430\\u0445\\u0438\\u0433\\u0430 - 0
19413 - \\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\\u044d - 1
19414 - \\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\\u0444\\u043e\\u0441 - 1
19415 - \\u041d\\u044d\\u0439\\u0440\\u043e\\u0441 - 0
19416 - \\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\\u0441\\u043a\\u043e\\u0443\\u0441 - 0

Т.е. мне нужно выбрать ТОЛЬКО те значения ID и Name, где есть relation_status...

Спустя 40 минут, 1 секунда (17.07.2012 - 20:13) Игорь_Vasinsky написал(а):
ну.. ты походу вообще необъяснил)) ща глянем

Спустя 16 минут, 24 секунды (17.07.2012 - 20:30) ArtemKrass написал(а):
Цитата (Игорь_Vasinsky @ 17.07.2012 - 17:13)
ну.. ты походу вообще необъяснил)) ща глянем

Дико извиняюсь... Просто второй день уже пытаюсь что-нибудь выдумать... Голова кругом!

Мне бы помогло что-то типа этого:
'#"id":([0-9]+),"name":"([^"]+).*"relation_status":([0-9]+)#i'

Но .* срабатывает не так как нужно...
Пробовал и .*? все не то...

Я пытаюсь .* заменить группу символов стоящих между значением name и relation_status, но не получается...

Спустя 48 минут, 53 секунды (17.07.2012 - 21:19) ArtemKrass написал(а):
Игорь Help Me!!! Одна надежда на тебя...

Спустя 38 минут, 44 секунды (17.07.2012 - 21:57) Игорь_Vasinsky написал(а):
блин.. я не успеваю одно дело закончить. тут winston щас на форуме - бог регулярок http://phpforum.ru/index.php?showuser=18161 - попроси помощи через ЛС

Спустя 3 минуты, 2 секунды (17.07.2012 - 22:00) ArtemKrass написал(а):
Попробую по другому:

Допустим есть несколько строк такого вида:

"50":{"id":16600,"name":"\u0420\u043e\u0441\u0433\u0430\u0432","dir":"n","expansion_stage":3,"x":775,"y":639,"ox":181,"oy":236,"offer":"iron","demand":"wood"}

"54":{"id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \u0432 13:57","looted":1342173157}

"52":{"id":18546,"name":"\u0413\u0430\u0432\u043d\u044d\u0439\u043a\u043e\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":4,"x":776,"y":656,"ox":700,"oy":200,"offer":"iron","demand":"wood"}

"53":{"id":18550,"name":"\u041d\u043e\u0441\u0445\u0438\u0433\u0430\u0432\u0440\u043e","dir":"n","expansion_stage":4,"x":776,"y":656,"ox":452,"oy":92,"offer":"iron","demand":"wood"}

"57":{"id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}


Как мне выбрать то, что находится между {.....}, но только те, где встречается relation_status...

???

Т.е. оставить только

{"id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \u0432 13:57","looted":1342173157}

{
"id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}

Спустя 30 минут, 55 секунд (17.07.2012 - 22:31) Игорь_Vasinsky написал(а):
получаешь эти строки в массив
потом
 foreach($arr as $value)

в цикле
 if(substr_count($value, 'relation_status')>0)
echo $value.'<br/>';

Спустя 18 минут, 19 секунд (17.07.2012 - 22:50) Winston написал(а):
Цитата (Игорь_Vasinsky @ 17.07.2012 - 21:57)
тут winston щас на форуме - бог регулярок

:lol: :lol: :lol:

Свернутый текст
$str = '"50":{"id":16600,"name":"\u0420\u043e\u0441\u0433\u0430\u0432","dir":"n","expansion_stage":3,"x":775,"y"  :639,"ox":181,"oy":236,"offer":"iron","demand":& ;quo t;wood"}

"54":{"id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y" :648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_huma n":"13.07.12 \u0432 13:57","looted":1342173157}

"52":{"id":18546,"name":"\u0413\u0430\u0432\u043d\u044d\u0439\u043a\u043e\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":4,"x":776,"y" :656,"ox":700,"oy":200,"offer":"iron","demand":"wood"}

"53":{"id":18550,"name":"\u041d\u043e\u0441\u0445\u0438\u0433\u0430\u0432\u0440\u043e","dir":"n","expansion_stage":4,"x":776,"y" :656,"ox":452,"oy":92,"offer":"iron","demand":" ; ;wood"}

"57":{"id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":64 8,"ox":694,"oy":296,"offer":"stone","demand":" wood","mood":100,"relation_status":0,"ratio":1.25}'
;

preg_match_all('#^.*({.*"relation_status".*}).*$#mu', $str, $m);

echo '<pre>' . print_r($m, 1) . '</pre>';


Результат
  [1] => Array
(
[0] => "id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y" :648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status"
[1] => "id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":64 8,"ox":694,"oy":296,"offer":"stone","demand":" wood","mood":100,"relation_status"
)

Спустя 8 часов, 36 минут, 46 секунд (18.07.2012 - 07:26) ArtemKrass написал(а):
Блин, так работает, а когда применяю к общему коду
http://phpforum.ru/html/counter/counter.ph...9/Json.txt.html

Выводит пустой массив:


<pre>Array
(
[
0] => Array
(
)

[
1] => Array
(
)

)
</
pre>


А мне то нужно чтобы из ответа сервера выбирались эти строки...
Пробовал так, все равно пустой массив...

preg_match_all('#.*({.*"relation_status".*}).*$#mu', $str, $m);

Спустя 5 минут, 17 секунд (18.07.2012 - 07:32) Игорь_Vasinsky написал(а):
$repl = array('CDATA'=>'', '<script type=\"text\/javascript\">'=>'');
$file = strtr(file_get_contents('json.txt'), $repl);

потом работай с $file;

Спустя 16 минут, 36 секунд (18.07.2012 - 07:48) ArtemKrass написал(а):
Не работает...
Приведу код скрипта, гляньте пожалуйста, если есть время...


<?php
ini_set("max_execution_time", "700");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-Type: text/html; charset=utf-8");
header("Pragma: no-cache");

error_reporting( E_ALL );

$url = 'http://ru.grepolis.com';
$urlTo_start_page = 'http://ru.grepolis.com/start/index?action=login_from_start_page';
$urlTo_start_page_next = 'http://ru.grepolis.com/start/index?action=fetch_news';
$urlTo_login_to_game = 'http://ru.grepolis.com/start?action=login_to_game_world';

$name = 'Tartang'; // Логин
$password = '7TXzMQvUZt3qUqh'; // Пароль

define('ROOT', dirname(__FILE__).'/');
$cookie_filename = ROOT . uniqid(md5(time()), true).'.tmp';

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30 );
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl, CURLOPT_REFERER, 'http://google.com' );
curl_setopt($curl, CURLOPT_URL, $url);
$html = curl_exec($curl);

$post = 'json={"name":"' . $name . '","password":"' . $password . '","passwordhash":"","autologin":false}';

curl_setopt($curl, CURLOPT_URL, $urlTo_start_page);
curl_setopt($curl, CURLOPT_REFERER, $url );
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($curl);

$post = 'json={}';
curl_setopt($curl, CURLOPT_URL, $urlTo_start_page_next);
curl_setopt($curl, CURLOPT_REFERER, $urlTo_start_page );
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($curl);

$post = 'world=ru11&facebook_session=&facebook_login=&gift_key=portal_sid=name=' . $name . '&password=' . $password;

curl_setopt($curl, CURLOPT_URL, $urlTo_login_to_game );
curl_setopt($curl, CURLOPT_REFERER, $urlTo_start_page_next );
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($curl);

preg_match("#Game\.csrfToken = '(\S+)'#", $html, $token);
$time = explode(' ', microtime());
$timef = $time[1] . substr($time[0], 2, 3);

// Здесь получаю ответ от сервера, в котором нужно выбрать 8 строчек с relation_status...
curl_setopt($curl, CURLOPT_URL, 'http://ru11.grepolis.com/game/data?action=get&town_id=51543&h='.$token[1].'&json={"types":[{"type":"grepolympiaTraining"},{"type": "map","param":{"x":9,"y":4}},{"type":"bar" ; ;},{"type":"playerprogress"}]}&_='.$timef);
curl_setopt($curl, CURLOPT_REFERER, 'http://ru11.grepolis.com/game/index?login=1');
curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));
$html = curl_exec($curl);

$repl = array('CDATA'=>'', '<script type=\"text\/javascript\">'=>'');
$file = strtr(file_get_contents($html), $repl);
print_r ($file);

curl_close($curl);
?>

Спустя 3 минуты, 35 секунд (18.07.2012 - 07:52) Игорь_Vasinsky написал(а):
show view
Цитата
print_r ($file);

Спустя 4 минуты, 46 секунд (18.07.2012 - 07:57) ArtemKrass написал(а):

Warning: file_get_contents(261178 {"grepolympiaTraining":{"data":"{\"training_points_per_skillpoint\":1000,\"sword\":{\"0\":12,\"1\":10,\"2\":720},\"slinger\":{\"0\":16,\"1\":10,\"2\":720},\"archer\":{\"0\":20,\"1\":10,\"2\":720},\"hoplite\":{\"0\":24,\"1\":15,\"2\":480},\"rider\":{\"0\":56,\"1\":8,\"2\":900},\"chariot\":{\"0\":128,\"1\":4,\"2\":1800},\"zyklop\":{\"0\":800,\"1\":1,\"2\":7200},\"harpy\":{\"0\":360,\"1\":1,\"2\":7200},\"medusa\":{\"0\":600,\"1\":1,\"2\":7200},\"minotaur\":{\"0\":420,\"1\":1,\"2\":7200},\"manticore\":{\"0\":880,\"1\":1,\"2\&qu in Y:\home\Curl1.ru\www\index.php on line 112


или код страницы


<br />
<
b>Warning</b>: file_get_contents(261178
{"grepolympiaTraining":{"data":"{\"training_points_per_skillpoint\":1000,\"sword\":{\"0\":12,\"1\":10,\"2\":720},\"slinger\":{\"0\":16,\"1\":10,\"2\":720},\"archer\":{\"0\":20,\"1\":10,\"2\":720},\"hoplite\":{\"0\":24,\"1\":15,\"2\":480},\"rider\":{\"0\":56,\"1\":8,\"2\":900},\"chariot\":{\"0\":128,\"1\":4,\"2\":1800},\"zyklop\":{\"0\":800,\"1\":1,\"2\":7200},\"harpy\":{\"0\":360,\"1\":1,\"2\":7200},\"medusa\":{\"0\":600,\"1\":1,\"2\":7200},\"minotaur\":{\"0\":420,\"1\":1,\"2\":7200},\"manticore\":{\"0\":880,\"1\":1,\"2\&qu in <b>Y:\home\Curl1.ru\www\index.php</b> on line <b>112</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>



112 строка:
$file = strtr(file_get_contents($html), $repl);

Спустя 18 минут, 28 секунд (18.07.2012 - 08:15) Игорь_Vasinsky написал(а):
file_get_contents() - работает с файлом, а не со строкой.

Спустя 27 минут, 4 секунды (18.07.2012 - 08:42) ArtemKrass написал(а):
Вот нормальная ссылка на ответ сервера:

Ответ сервера

Спустя 12 минут, 3 секунды (18.07.2012 - 08:54) Игорь_Vasinsky написал(а):
так ты курлом в переменную складываешь контент или с файлом работаешь?

если в переменную - то

$repl = array('CDATA'=>'', '<script type=\"text\/javascript\">'=>'');
$data = strtr($content, $repl);


Спустя 17 минут, 21 секунда (18.07.2012 - 09:12) ArtemKrass написал(а):
Чет я не пойму что это мне дает??(

Прочитал про CDATA
http://ru.wikipedia.org/wiki/CDATA

Въехать не могу...

Спустя 15 минут, 39 секунд (18.07.2012 - 09:27) Игорь_Vasinsky написал(а):
strtr() вырезало эту гадость, оставивь всё остальное

Спустя 12 минут, 3 секунды (18.07.2012 - 09:39) ArtemKrass написал(а):
На выходе все равно огромный блок кода... Почти ничего не поменялось...

http://dl.dropbox.com/u/70752478/strtr.txt

Спустя 5 минут, 14 секунд (18.07.2012 - 09:45) Winston написал(а):
Проверяй

Спустя 9 минут, 30 секунд (18.07.2012 - 09:54) ArtemKrass написал(а):
УРРРРАААА!!!! Работает!!!

Ребята огромное Вам СПАСИБО!!!

Спустя 4 часа, 32 минуты, 10 секунд (18.07.2012 - 14:26) ArtemKrass написал(а):
Блин, думал дальше сам разберусь...
Получаю массив:


Array
(
[
0] => Array
(
[
0] => {"id":19409,"name":"\\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\ \u043e\\u043d\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \\u0432 13:57","looted":1342173157}
[1] => {"id":19410,"name":"\\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\ \u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \\u0432 21:47","looted":1342460546}
[2] => {"id":19411,"name":"\\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\ \u0440\\u044d\\u0439","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":680,"oy":234,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
[3] => {"id":19412,"name":"\\u0422\\u0430\\u0445\\u0438\\u0433\\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
[4] => {"id":19413,"name":"\\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\ \u044d","dir":"n","expansion_stage":4,"x":788,"y":648,"ox":278,"oy":208,"offer":"stone","demand":"iron","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460843,"lootable_human":"16.07.12 \\u0432 21:47","looted":1342460543}
[5] => {"id":19414,"name":"\\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\ \u0444\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":228,"oy":265,"offer":"wood","demand":"iron","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173456,"lootable_human":"13.07.12 \\u0432 13:57","looted":1342173156}
[6] => {"id":19415,"name":"\\u041d\\u044d\\u0439\\u0440\\u043e\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":589,"oy":365,"offer":"iron","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
[7] => {"id":19416,"name":"\\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\ \u0441\\u043a\\u043e\\u0443\\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":772,"oy":274,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
)

)



Теперь новая задача... Как отсюда выбрать значения Id, name и relation_status?

Пробовал так:

foreach($m[0] as $item)
{
echo json_decode($item);
}

Нифига...

А если брать отдельное значение массива, json_decode нормально срабатывает...

Спустя 20 минут, 8 секунд (18.07.2012 - 14:46) Игорь_Vasinsky написал(а):
foreach($m[0] as $item) 
{
$json = json_decode($item, true);
$id = $json['id'];
$name = $json['name'];
$relation_status = $json['relation_status'];
}

Спустя 35 минут, 12 секунд (18.07.2012 - 15:22) ArtemKrass написал(а):

foreach($m[0] as $item)
{
$json = json_decode($item, true);
}


Все правильно срабатывает, на выходе имеем декодированный массив:


Array
(
[
id] => 19409
[name] => \u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 629
[oy] => 170
[offer] => stone
[demand] => wood
[mood] => 100
[relation_status] => 1
[ratio] => 1.25
[loot] => 1342173457
[lootable_human] => 13.07.12 \u0432 13:57
[looted] => 1342173157
)
Array
(
[
id] => 19410
[name] => \u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 472
[oy] => 147
[offer] => wood
[demand] => stone
[mood] => 100
[relation_status] => 1
[ratio] => 1.25
[loot] => 1342460846
[lootable_human] => 16.07.12 \u0432 21:47
[looted] => 1342460546
)
Array
(
[
id] => 19411
[name] => \u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 680
[oy] => 234
[offer] => stone
[demand] => wood
[mood] => 100
[relation_status] => 0
[ratio] => 1.25
)
Array
(
[
id] => 19412
[name] => \u0422\u0430\u0445\u0438\u0433\u0430
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 694
[oy] => 296
[offer] => stone
[demand] => wood
[mood] => 100
[relation_status] => 0
[ratio] => 1.25
)
Array
(
[
id] => 19413
[name] => \u0420\u043e\u0442\u0430\u0440\u043e\u0441\u044d
[dir] => n
[expansion_stage] => 4
[x] => 788
[y] => 648
[ox] => 278
[oy] => 208
[offer] => stone
[demand] => iron
[mood] => 100
[relation_status] => 1
[ratio] => 1.25
[loot] => 1342460843
[lootable_human] => 16.07.12 \u0432 21:47
[looted] => 1342460543
)
Array
(
[
id] => 19414
[name] => \u0414\u043e\u043d\u043e\u0441\u0433\u0430\u0444\u043e\u0441
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 228
[oy] => 265
[offer] => wood
[demand] => iron
[mood] => 100
[relation_status] => 1
[ratio] => 1.25
[loot] => 1342173456
[lootable_human] => 13.07.12 \u0432 13:57
[looted] => 1342173156
)
Array
(
[
id] => 19415
[name] => \u041d\u044d\u0439\u0440\u043e\u0441
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 589
[oy] => 365
[offer] => iron
[demand] => wood
[mood] => 100
[relation_status] => 0
[ratio] => 1.25
)
Array
(
[
id] => 19416
[name] => \u0421\u0442\u0440\u0430\u0439\u043d\u043e\u0441\u043a\u043e\u0443\u0441
[dir] => n
[expansion_stage] => 3
[x] => 788
[y] => 648
[ox] => 772
[oy] => 274
[offer] => stone
[demand] => wood
[mood] => 100
[relation_status] => 0
[ratio] => 1.25
)



Ключи в этом массиве одинаковы, поэтому при использовании значения в дальнейшем он выбирает последнее значение... А мне нужно работать со всеми...

Спустя 28 минут, 56 секунд (18.07.2012 - 15:51) Winston написал(а):
json = array();
foreach($m[0] as $item)
$json[] = json_decode($item, true);

foreach($json as $item)
{
echo $item['id'] . ' ';
}


Спустя 4 часа, 13 минут, 49 секунд (18.07.2012 - 20:04) Игорь_Vasinsky написал(а):
а..ну да. не проверил.

Спустя 13 часов, 56 минут, 56 секунд (19.07.2012 - 10:01) Эли4ка написал(а):
а скажите,пожалуйста,как можно выбрать данные из примерного такого расположения-
"accid":10355606,
"duration":68,
"videoUrl":"http://v.set.ws/227.html",
"authorUrl":"http://v.set.ws/vitsts",
"key":"0388afe1",
"videos":{
"sd":"http://look.set.ws/ahbbce-227.flv"
},
"posters":{
"p":"http://set.ws/p-227.jpg",
"sd":"http://set.ws/i-227.jpg"
},
"lvHack":null,
"region":"146",
"HDexist":false

просто тут встречаются данные,как заключенные в апострофы,так и без них,к тому же тут еще все это разбавлено {}..ну что ж-это json.. :( :( ,помогите,а то я для некоторых выбираю,а для некоторых не получается..(в частности для тех,которые без апострофов)

Спустя 18 минут, 9 секунд (19.07.2012 - 10:19) Игорь_Vasinsky написал(а):
лень было тему почитать???

$str = '"accid":10355606,
"duration":68,
"videoUrl":"http://v.set.ws/227.html",
"authorUrl":"http://v.set.ws/vitsts",
"key":"0388afe1",
"videos":{
"sd":"http://look.set.ws/ahbbce-227.flv"
},
"posters":{
"p":"http://set.ws/p-227.jpg",
"sd":"http://set.ws/i-227.jpg"
},
"lvHack":null,
"region":"146",
"HDexist":false'
;


$jsondata = '{'.$str.'}';

echo '<pre>' . print_r(json_decode($jsondata, true), 1) . '</pre>';


Array
(
[accid] => 10355606
[duration] => 68
[videoUrl] => http://v.set.ws/227.html
[authorUrl] => http://v.set.ws/vitsts
[key] => 0388afe1
[videos] => Array
(
[sd] => http://look.set.ws/ahbbce-227.flv
)

[posters] => Array
(
[p] => http://set.ws/p-227.jpg
[sd] => http://set.ws/i-227.jpg
)

[lvHack] =>
[region] => 146
[HDexist] =>
)


не которые элементы пусты - т.к. эти зарезервированные в php слова не обрамлены в кавычки false, null

Спустя 54 минуты, 2 секунды (19.07.2012 - 11:13) Эли4ка написал(а):
Игорь_Vasinsky
да я читала,но что за ф-я json_decode у меня ее в справочнике нет.. sad.gif ,и я если честно не совсем поняла принцип..

Спустя 20 минут, 19 секунд (19.07.2012 - 11:34) Игорь_Vasinsky написал(а):
данные поступившие в json формате - були декодированы через json_decode() - после чего был получен ассоциативный массив - с котором удобней работать.

//Есть массив
$arr = array(
'first'=>'data',
'second' => array(
'data1' => 123123,
'data2' => 435232
)
);


//получаем строку в json формате
$json = json_encode($arr);
//echo $json -> {"first":"data","second":{"data1":123123,"data2":43 5232}}
echo $json;
//Обратно декодируем

$jarr = json_decode($json, true);

echo '<pre>' . print_r($jarr, 1) . '</pre>';


Цитата
Array
(
    [first] => data
    [second] => Array
        (
            [data1] => 123123
            [data2] => 435232
        )

)

Спустя 13 минут, 2 секунды (19.07.2012 - 11:47) Эли4ка написал(а):
Игорь_Vasinsky
теперь ясно,спасибо,но странно я на php.su в справочниках функции не нашла этой функции..да я изобретала велосипед..хотела что-то подобное сделать,когда не знала про эту функцию.. smile.gif smile.gif

Спустя 1 минута, 18 секунд (19.07.2012 - 11:48) Игорь_Vasinsky написал(а):
lol
serealize()
unserialize()

Спустя 12 минут, 41 секунда (19.07.2012 - 12:01) Эли4ка написал(а):
Цитата
serealize()
unserialize()

Игорь_Vasinsky
это что,похожие ф-и,или старое их название?

Спустя 13 минут, 24 секунды (19.07.2012 - 12:14) Игорь_Vasinsky написал(а):
малость похожие, просто json понимают и php и JS а сеаризация удобна когда нужно писать массив в БД, например

Спустя 14 минут, 51 секунда (19.07.2012 - 12:29) Эли4ка написал(а):
Игорь_Vasinsky
теперь ясно,спасибо. rolleyes.gif rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.