[[5919,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,и так далее.
Нужно в новую переменную получить значение первого числа, в этом примере 5919, а из исходной строки удалить первое число, и запятую после него.
Решения в лоб, уж больно замороченными получаются.
Может есть более красивые решения?
Спустя 5 минут, 28 секунд (18.06.2012 - 23:57) rooor написал(а):
$a = '[[5919,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,';
$a = substr($a, 3, 3);
echo $a;
Спустя 2 минуты, 35 секунд (19.06.2012 - 00:00) Invis1ble написал(а):
Цитата |
Решения в лоб, уж больно замороченными получаются. |
Например? Какие конкретно ты видишь решения?
Спустя 14 минут, 14 секунд (19.06.2012 - 00:14) MisHel64 написал(а):
rooor:
Циферок в первом числе может быть и не 4, а от одной до десяти.
И первое число нужно занести в новую переменную, при этом в старой удалить и первое число, и запятую, для дальнейшего разбора.
Циферок в первом числе может быть и не 4, а от одной до десяти.
И первое число нужно занести в новую переменную, при этом в старой удалить и первое число, и запятую, для дальнейшего разбора.
Спустя 1 час, 36 минут, 1 секунда (19.06.2012 - 01:50) FatCat написал(а):
Цитата (MisHel64 @ 19.06.2012 - 00:52) |
более красивые решения? |
А чем "в лоб" некрасиво?
$str = '[[5919,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,';
preg_match("/-{0,1}\d+/i", $str, $num); // Забираем первое число в переменную $num[0]
$str = // Собираем переменную
substr($str,0,strpos($str,$num[0])) // из куска строки до числа
.substr( $str,(strpos($str,$num[0])+strlen($num[0])+1) ); // и строки после числа
echo 'Найдено число: '.$num[0].',<br>Измененная строка: '.$str;
Спустя 1 час, 5 минут, 49 секунд (19.06.2012 - 02:56) MisHel64 написал(а):
Да просто сам подход, разбить строку на две, а потом склеивать кажется несколько не адекватным. Думал может есть функции удаляющие из строки подстроку, типа паскалевского DELETE.
И смысла регулярного выражения не понял. Вообще. Раньше не сталкивался.
Даже читая справочник по регулярным выражениям все равно не понимаю его смысла.
И смысла регулярного выражения не понял. Вообще. Раньше не сталкивался.
Даже читая справочник по регулярным выражениям все равно не понимаю его смысла.
Спустя 14 минут, 40 секунд (19.06.2012 - 03:11) MisHel64 написал(а):
А вообще, задача на много сложнее.
Вот только не знаю как ее сформулировать.
В общем есть скрипт, выгружающий некие данные из своих внутренних массивов.
Эти массивы описывают карту игрового мира.
*) Первый уровень вложенности прописывает один мир.
*) Второй уровень описывает видимость одного города.
В данной строке, 5919 это код города, или Z координата.
*) На третьем уровне описывается клеточка карты, в данном примере
[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]] описывает клетку с координатами X=-5, Y=-5, остальные циферки описывают различные свойства.
*) На 4м уровне, описываются различные атрибуты этой клетки.
В данном примере это ["mi220 mp22","mw10 mx34"]
Все это передается через POST запрос на сервер.
Вот теперь задача разпарсить эти данные на PHP, что бы загнать в серверную БД. Проблема в том, что ява скрипт менять низя.
Клеточек, даже в одном мире, в одном городе очень много. Так что скорость ОЧЕНЬ критична.
Вот только не знаю как ее сформулировать.
В общем есть скрипт, выгружающий некие данные из своих внутренних массивов.
Эти массивы описывают карту игрового мира.
*) Первый уровень вложенности прописывает один мир.
*) Второй уровень описывает видимость одного города.
В данной строке, 5919 это код города, или Z координата.
*) На третьем уровне описывается клеточка карты, в данном примере
[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]] описывает клетку с координатами X=-5, Y=-5, остальные циферки описывают различные свойства.
*) На 4м уровне, описываются различные атрибуты этой клетки.
В данном примере это ["mi220 mp22","mw10 mx34"]
Все это передается через POST запрос на сервер.
Вот теперь задача разпарсить эти данные на PHP, что бы загнать в серверную БД. Проблема в том, что ява скрипт менять низя.
Клеточек, даже в одном мире, в одном городе очень много. Так что скорость ОЧЕНЬ критична.
Спустя 35 минут, 22 секунды (19.06.2012 - 03:46) MisHel64 написал(а):
"А чем "в лоб" некрасиво?"
Есть еще одна некрасивость. Число может быть опущено, то есть строка будет выглядеть вот так: $str = '[[,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,';
Это означает, что Z координата равна нулю.
Есть еще одна некрасивость. Число может быть опущено, то есть строка будет выглядеть вот так: $str = '[[,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,';
Это означает, что Z координата равна нулю.
Спустя 8 часов, 50 минут, 1 секунда (19.06.2012 - 12:36) Invis1ble написал(а):
возможно, имеет смысл рассмотреть строку как JSON ? json_decode() -> array_shift() + рекурсия, не?
Спустя 6 часов, 17 минут, 51 секунда (19.06.2012 - 18:54) MisHel64 написал(а):
Пробовал я через JSON, что то не получилось, вернулся пусто массив.
Можно кусочек реального кода, для умственного развития?
Можно кусочек реального кода, для умственного развития?
Спустя 21 минута, 15 секунд (19.06.2012 - 19:15) Invis1ble написал(а):
так например
но это имеет смысл, только если ты в дальнейшем работаешь с данными в виде массива, иначе лучше регуляркой
function array_rshift_num(array &$data) {
foreach ($data as $k => &$item) {
if (is_int($item)) {
unset($data[$k]);
return $item;
}
elseif (is_array($item)) {
return array_rshift_num($item);
}
}
}
$data = json_decode('[[5919, [-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]]]]');
var_dump(array_rshift_num($data));
var_dump($data);
но это имеет смысл, только если ты в дальнейшем работаешь с данными в виде массива, иначе лучше регуляркой
Спустя 2 часа, 53 минуты, 10 секунд (19.06.2012 - 22:08) MisHel64 написал(а):
$RAW=$_POST['data']; $Arr=json_decode($RAW); var_dump($Arr);
Вывод: NULL
В $RAW данные пришли нормально, проверенно.
Спустя 1 час, 45 минут, 29 секунд (19.06.2012 - 23:54) Invis1ble написал(а):
значит некорректный json скорее всего
http://php.net/manual/ru/function.json-decode.php
http://php.net/manual/ru/function.json-last-error.php можно проверить
http://php.net/manual/ru/function.json-decode.php
http://php.net/manual/ru/function.json-last-error.php можно проверить
Спустя 9 часов, 43 минуты, 59 секунд (20.06.2012 - 09:38) MisHel64 написал(а):
Не "некорректный" где? У хостера? Да как бы не я один там хощусь, там еще сотни людей держат свои проекты, и пока никто не жаловался. По крайне мере, ни одной жалобы на форуме поддержки я не видел.
Спустя 1 час, 49 минут, 42 секунды (20.06.2012 - 11:28) Invis1ble написал(а):
А причем здесь хостер?
Спустя 22 минуты, 7 секунд (20.06.2012 - 11:50) MisHel64 написал(а):
А кто тогда причем, если "некорректный json"?
Спустя 2 минуты, 22 секунды (20.06.2012 - 11:52) Invis1ble написал(а):
Откуда я знаю, кто причем. Источник данных, не?
И я не утверждал, что он некорректный, я высказал предположение, и указал, как его можно проверить.
Покажи полностью строку.
И я не утверждал, что он некорректный, я высказал предположение, и указал, как его можно проверить.
Покажи полностью строку.
Спустя 17 минут, 12 секунд (20.06.2012 - 12:09) MisHel64 написал(а):
Источник данных точно не причем. Да и по виду эта строка не похожа на пример из вики (http://ru.wikipedia.org/wiki/JSON).
Полную строку не дам, она весит очень много килобайт.
Вот вариант, описывающий всего две точки, всего одного города.
[[5919,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,["mi221 mp22","mw10 mx36"]]]]
Полную строку не дам, она весит очень много килобайт.
Вот вариант, описывающий всего две точки, всего одного города.
[[5919,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,["mi221 mp22","mw10 mx36"]]]]
Спустя 19 минут, 1 секунда (20.06.2012 - 12:28) killer8080 написал(а):
Цитата (MisHel64 @ 20.06.2012 - 12:09) |
Да и по виду эта строка не похожа на пример из вики (http://ru.wikipedia.org/wiki/JSON). |
И что это по твоему, если не JSON?

$js = '[[5919,[-5,-5,-1,-1,-1,2,0,-1,-1,-1,["mi220 mp22","mw10 mx34"]],[-4,-5,-1,-1,-1,2,0,-1,-1,-1,["mi221 mp22","mw10 mx36"]]]]';
echo '<pre>',print_r(json_decode($js), 1),'</pre>';
Спустя 49 минут, 38 секунд (20.06.2012 - 13:18) MisHel64 написал(а):
Не знаю. Не похожа она на ту что на вике.
Попробовал. Пример работает. Вручную вставленная строка из локального хранилища, и ручками вставленная в PHP, работает.
Но вот если сделать так, ничего не меняя:
$js = $_POST['data']; - не работает.
При этом echo $js,'<br />'; исправно выводит строку.
Дописал: file_put_contents("${RD}/logz/_raw.dump",$js);
Доступно по адресу: http://www.wofh.tk/logz/_raw.dump
Попробовал. Пример работает. Вручную вставленная строка из локального хранилища, и ручками вставленная в PHP, работает.
Но вот если сделать так, ничего не меняя:
$js = $_POST['data']; - не работает.
При этом echo $js,'<br />'; исправно выводит строку.
Дописал: file_put_contents("${RD}/logz/_raw.dump",$js);
Доступно по адресу: http://www.wofh.tk/logz/_raw.dump
Спустя 8 минут, 19 секунд (20.06.2012 - 13:26) MisHel64 написал(а):
Сам клиентский скрипт, если поможет: http://www.wofh.tk/map/js/wofh_map.user.js
Спустя 40 минут, 2 секунды (20.06.2012 - 14:06) Invis1ble написал(а):
MisHel64
вот тебе пример из мануала
вывод:
вот тебе пример из мануала
$data = "..."; // тут строка из твоего дампа
var_dump(json_decode($data));
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - Ошибок нет';
break;
case JSON_ERROR_DEPTH:
echo ' - Достигнута максимальная глубина стека';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Некорректные разряды или не совпадение режимов';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Некорректный управляющий символ';
break;
case JSON_ERROR_SYNTAX:
echo ' - Синтаксическая ошибка, не корректный JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Некорректные символы UTF-8, возможно неверная кодировка';
break;
default:
echo ' - Неизвестная ошибка';
break;
}
вывод:
Цитата |
- Синтаксическая ошибка, не корректный JSON |
Спустя 16 минут, 33 секунды (20.06.2012 - 14:23) MisHel64 написал(а):
А вот тебе пример из практики:
Fatal error: Call to undefined function json_last_error() in /home/public_html/map/import.php on line 29
и Invis1ble, личная просьба. Не пишите в этой теме больше. Вы и так себе хорошо счетчик намотали.
Fatal error: Call to undefined function json_last_error() in /home/public_html/map/import.php on line 29
и Invis1ble, личная просьба. Не пишите в этой теме больше. Вы и так себе хорошо счетчик намотали.
Спустя 6 минут, 17 секунд (20.06.2012 - 14:29) Invis1ble написал(а):
Цитата |
и Invis1ble, личная просьба. Не пишите в этой теме больше. |
Это еще почему, позволь поинтересоваться?

Спустя 1 минута, 34 секунды (20.06.2012 - 14:31) killer8080 написал(а):
MisHel64
Ошибка номер раз:
- строка json была заслешена, очевидно не был отключен magic quotes
Второе - синтаксическая ошибка в json строке
вставь свой код в валидатор json http://jsonformatter.curiousconcept.com/
Ошибка номер раз:
- строка json была заслешена, очевидно не был отключен magic quotes
Второе - синтаксическая ошибка в json строке
вставь свой код в валидатор json http://jsonformatter.curiousconcept.com/

Спустя 1 минута, 39 секунд (20.06.2012 - 14:32) MisHel64 написал(а):
Invis1ble: А потому, что смысла в твоих постах ноль.
Спустя 53 секунды (20.06.2012 - 14:33) killer8080 написал(а):
Цитата (MisHel64 @ 20.06.2012 - 14:23) |
А вот тебе пример из практики: Fatal error: Call to undefined function json_last_error() in /home/public_html/map/import.php on line 29 |
Спустя 6 минут, 33 секунды (20.06.2012 - 14:40) Invis1ble написал(а):
Цитата |
А потому, что смысла в твоих постах ноль. |
ну да, ну да... Я ж тут оффтопил все это время, негодяй

Спустя 4 минуты, 48 секунд (20.06.2012 - 14:44) MisHel64 написал(а):
php_flag magic_quotes_gpc Off в .htaccess есть.
Это http://www.simplecoding.org/boremsya-s-magic-quotes.html читал
Это http://www.simplecoding.org/boremsya-s-magic-quotes.html читал
Спустя 4 минуты, 52 секунды (20.06.2012 - 14:49) killer8080 написал(а):
MisHel64
в том файле что ты выложил все кавычки экранированы. Я не знаю что ты где читал, я говорю о том что вижу. Как ты получаешь эти данные?
в том файле что ты выложил все кавычки экранированы. Я не знаю что ты где читал, я говорю о том что вижу. Как ты получаешь эти данные?
Спустя 2 минуты (20.06.2012 - 14:51) MisHel64 написал(а):
версия: 5.2.17
>> Зачем человека обижаешь? Он дело говорит.
Не нужно считать других людей глупей себя.
>> Зачем человека обижаешь? Он дело говорит.
Не нужно считать других людей глупей себя.
Спустя 2 минуты, 14 секунд (20.06.2012 - 14:54) killer8080 написал(а):
Цитата (MisHel64 @ 20.06.2012 - 14:51) |
Не нужно считать других людей глупей себя. |
Я не заметил в его высказываниях ничего оскорбительного. Советы он давал по делу.
Спустя 42 секунды (20.06.2012 - 14:54) MisHel64 написал(а):
Цитата (killer8080 @ 20.06.2012 - 11:49) |
MisHel64 в том файле что ты выложил все кавычки экранированы. Я не знаю что ты где читал, я говорю о том что вижу. Как ты получаешь эти данные? |
Спустя 2 минуты, 5 секунд (20.06.2012 - 14:56) MisHel64 написал(а):
Цитата (killer8080 @ 20.06.2012 - 11:54) | ||
Я не заметил в его высказываниях ничего оскорбительного. Советы он давал по делу. |
А никто и не говорит, что они оскорбительные. просто безполезные.
Спустя 2 минуты, 17 секунд (20.06.2012 - 14:59) killer8080 написал(а):
MisHel64
magic quotes gpc у тебя включен - это факт. Можешь посмотреть в phpinfo()
Если нет возможности его выключить (хотя странно конечно) stripslashes() тебе в помощь, но в любом случае в json ошибка - лишняя кавычка, я тебе её показал.
Спустя 3 минуты, 8 секунд killer8080 написал(а):
magic quotes gpc у тебя включен - это факт. Можешь посмотреть в phpinfo()
Если нет возможности его выключить (хотя странно конечно) stripslashes() тебе в помощь, но в любом случае в json ошибка - лишняя кавычка, я тебе её показал.
Спустя 3 минуты, 8 секунд killer8080 написал(а):
Цитата (MisHel64 @ 20.06.2012 - 14:56) |
А никто и не говорит, что они оскорбительные. просто безполезные. |
От чего же бесполезные? Тебе показали как посмотреть ошибку json_decode, а то что у тебя версия пыха по древнее, так в этом никто ж не виноват

Спустя 28 минут, 2 секунды (20.06.2012 - 15:27) MisHel64 написал(а):
Да я ее и так вижу. Проблема в том, то это не JSON.
Да, немного похож. И в частном случае совместим. Но только в частном. Но это не он.
И бороться с ошибками парсера, не имеет смысла совершенно, пока входные данные не будут полностью совместимы с ним. Я уже сделал разбор, и без него. А то, что лапки экранируются, это не самое страшное.
По этому я просто не вижу смыла, в тыкании в мануалы по JSON, рассуждения на тему обнаружения ошибки, разглагольствований кто в этом виноват, и прочее. Это не JSON. Все.
Парсер заткнулся на обработке одного "хопа", одного города. А таких "хопов" у каждого города сотни. И городов сотни.
Да, немного похож. И в частном случае совместим. Но только в частном. Но это не он.
И бороться с ошибками парсера, не имеет смысла совершенно, пока входные данные не будут полностью совместимы с ним. Я уже сделал разбор, и без него. А то, что лапки экранируются, это не самое страшное.
По этому я просто не вижу смыла, в тыкании в мануалы по JSON, рассуждения на тему обнаружения ошибки, разглагольствований кто в этом виноват, и прочее. Это не JSON. Все.
Парсер заткнулся на обработке одного "хопа", одного города. А таких "хопов" у каждого города сотни. И городов сотни.
Спустя 4 минуты, 30 секунд (20.06.2012 - 15:31) MisHel64 написал(а):
Цитата (killer8080 @ 20.06.2012 - 11:59) |
MisHel64 magic quotes gpc у тебя включен - это факт. |
Что-то мне подсказывает, что все же нет: http://www.wofh.tk/map/php_info.php
Спустя 46 минут, 33 секунды (20.06.2012 - 16:18) killer8080 написал(а):
Цитата (MisHel64 @ 20.06.2012 - 15:27) |
Проблема в том, то это не JSON. |
Это JSON, просто криво сгененрированный.
Цитата (MisHel64 @ 20.06.2012 - 15:27) |
Парсер заткнулся на обработке одного "хопа", одного города. А таких "хопов" у каждого города сотни. И городов сотни. |
json_decode заткнулся на лишней кавычке (если убрать слеши)
Цитата |
[0,0,"1x.XXX"","Белочка",-1,2,0,-1,-1,-1,["mi221 mp22","mt mt03"]] |
Спустя 2 минуты, 18 секунд (20.06.2012 - 16:20) Invis1ble написал(а):
killer8080
"Не нужно считать других людей глупей себя."
Если ТС говорит, что это не json - значит так и есть
"Не нужно считать других людей глупей себя."
Если ТС говорит, что это не json - значит так и есть

