Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2020, 01:36   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Ассоциативные массивы и JSON

Здравствуйте.
Есть вот такая конструкция - ссылка на исходник.
Есть аналогичная, развёрнутая, но более громоздкая конструкция - ссылка на исходник.

При работе в serialize/unserialize - всё нормально.
Но мне нужно реализовать курсирование этих данных между сервером и клиентом, то есть JSON.
При выполнении json_decode я получаю не массив, как это задумано, а объект, что ставит крест на возможности работать с ключами. Это нужно делать как в JS, так и в PHP.
На клиенте эти данные необходимо иногда менять, на сервере - постоянно использовать.

Можно конечно же get_object_vars, но как обращаться к этим свойствам (из переменной) - я не знаю.

Так же я попытался как обычно это бывает - собрать нужный JSON прямо в строку, что бы из json_decode я получил задуманный ассоциативный массив.
Но я получаю либо объект, либо индексный массив (обращаться по номерам), либо null.

Помню когда-то работал только с индексными массивами, и сейчас лишний раз убеждаюсь, что от своего убеждения далеко не ушёл.
Ассоциативные бывают удобными, особенно для быстрого поиска данных. Но если речь заходит о таблицах - едва-ли дело доходит до ключ-значение.


Что можете подсказать ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 10.03.2020 в 03:19.
OmegaBerkut вне форума Ответить с цитированием
Старый 10.03.2020, 08:30   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

1. Конкретно что вы хотите? Туда-сюда указанные вами структуры гонять?
2. Для того чтоб передать json - так сделайте его командой json_encode
3. соответственно в js придет json с исходной структурой
ADSoft вне форума Ответить с цитированием
Старый 10.03.2020, 10:32   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Конкретно что вы хотите?
Что бы на выходе из json_decode была та же структура, что и на входе в json_encode.
Что бы я мог обращаться в переменную вот так:
Код:
$count_data=count($links_struct); // в моём случае это задумано 9
$keys=array_keys($links_struct); // здесь нужны именованные ключи
file_get_contents($links_struct[$keys[0]]['link']); // это вырожденный пример; задумано что параметр приходит из $_GET['param'], но это не работает с объектами
Так задумано исходной структурой.
Но после того что я делаю выше (по примерам формирование массива и json_encode/json_decode - мне нужно обращаться не к элементам массива, а к объектам
Код:
$count_data=count($links_struct); // в моём случае это получается 1
$keys=get_object_vars($links_struct); // аналог из прошлого блока кода, но для объекта
$count_data=count($keys); // так выйдет 9, но в этом нет смысла
file_get_contents($links_struct[$keys[0]]['link']); // НЕ работает
// Обращаться нужно по другому
file_get_contents($links_struct-general->link); // такая конструкция не позволяет брать значение по ключу из переменной, и лишает смысла get_object_vars в моём случае
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 10.03.2020 в 10:35.
OmegaBerkut вне форума Ответить с цитированием
Старый 10.03.2020, 12:45   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

сплошная муть...
Давай с начала
формируешь в php и передаешь в JS - там все нормально?
Код Пхп и код js покажи

потом в обратную сторону
при чем тут file_get_contents - я вообще не догоняю
ADSoft вне форума Ответить с цитированием
Старый 10.03.2020, 15:20   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Код Пхп и код js покажи
Кода JS ещё нет, я с PHP не разобрался.
Да и с JS не должно быть проблем, там можно обращаться как в ассоциативный массив, и как в поле объекта.
Есть три файла PHP, в каждом по 50 строк кода. Вы будите разбираться что к чему ?

Я показал код PHP - ссылка на исходник. Это структура данных, которую мне нужно гонять в json_encode и json_decode

Когда я эту структуру данных (массив) отдаю в json_encode - получаю строку, с этим всё номрально.
А когда полученную строку отдаю в json_decode - я получаю совершенно другую структуру (объект stdClass), которая отличается от исходной.

Мне нужно, что бы на выходе из json_decode я получал ту структуру, которую отдаю в json_encode
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 10.03.2020, 17:23   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

"ничего не готово, все потом будет но сейчас я гоняю туда сюда..." нехрена?

Прочтите документацию по используемым функциям
https://php.ru/manual/function.json-decode.html

Сделайте
Код:
var_dump(json_decode($json));
var_dump(json_decode($json, true));
прочувствуйте разницу
ADSoft вне форума Ответить с цитированием
Старый 10.03.2020, 19:13   #7
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Прочтите документацию по используемым функциям
Читал. Ещё я гуглил. Сюда бы не пришёл, будь проблема решена.
И да, в вашей ссылке даже нет примеров работы с ассоциативными (ключ-значение) массивами PHP.

Цитата:
Сообщение от ADSoft Посмотреть сообщение
"ничего не готово, все потом будет но сейчас я гоняю туда сюда..." нехрена?
Так проблема выявилась в процессе подготовки.
Я ему массив, а он мне - объект. В этом и есть проблема.
Сейчас даже готовить толком нечего, ибо нет рабочей структуры данных, которая отправлялась бы в JS, и работала как требуется в PHP.

Суть задумки:
1) есть массив ссылок, которые нужно вызывать из PHP (file_get_contents), раз в сутки;
2) эти ссылки необходимо иногда менять, допустим раз в месяц, и менять их должен пользователь;
3) создаётся ассоциативный массив двойной вложенности
Код:
[
	'param_0':['alias':'_name-0_','link':'_url-0_'],
	'param_1':['alias':'_name-1_','link':'_url-1_'],
	...
]
// это примерное представление того что я вижу в json, я уже написал выше что пытался собрать структуру непосредственно в json
// аналогичный рабочий код PHP смотрите по моим ссылкам выше
4) на клиента передаётся json, там меняется, и передаётся обратно на сервер;
5) в PHP нужно из массива взять $links_struct[$_GET['param']]['link'], и вызвать эту ссылку.

Проблема в том, что я не могу из JSON получить задуманную структуру данных.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 10.03.2020 в 19:31.
OmegaBerkut вне форума Ответить с цитированием
Старый 10.03.2020, 19:51   #8
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

может потому что структура ваша кривая?
может я чего-то недопонимаю?
зачем в массиве! какие то ключи искусственные типа param_0, param_1 итд - чем индексы обычные не угодили? зачем вообще массивы? БД что - под запретом?
сделали б структуру
id
alias
link

доставай как и сколько хочешь, записывай.... кароче все удобно

Код:
echo "<pre>";
print_r($links_struct);

$json = json_encode($links_struct);

$out = json_decode($json,true);

print_r($out);
Выдает два идентичных массива, что не так то???
ADSoft вне форума Ответить с цитированием
Старый 10.03.2020, 21:55   #9
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
какие то ключи искусственные типа param_0, param_1 итд - чем индексы обычные не угодили?
Не ну а как же это пресловутое "ключ-значение" ?
Помнится мне именно на этом форуме писали, что текстовые ключи "удобнее и нагляднее".

Так, числовыми индексами по порядку можно закодить что угодно, так я умею.

Цитата:
Сообщение от ADSoft Посмотреть сообщение
может потому что структура ваша кривая?
Аргументы в студию.
Структура исправно работает в PHP.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 10.03.2020, 22:43   #10
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Какие тут аргументы...
Каков смысл ассоциативности массива, если ключи не имеют смысла? Никакого
Ну хотите использовать используйте... Микроскопом тоже можно гвозди забивать и это будет работать.. но нужно ли

Вы свою проблему с json то решили?
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с JSON (System.JSON) nibufep Общие вопросы Delphi 3 19.04.2016 18:21
Ассоциативные индексы (Паскаль) Паскалька^^ Помощь студентам 1 19.10.2010 21:13
Ассоциативные массивы ROD Общие вопросы C/C++ 4 12.10.2010 20:54
Ассоциативные массивы в С# Jeid Общие вопросы .NET 2 12.09.2010 11:59
Ассоциативные списки в MULisp Rio309 Помощь студентам 0 20.04.2009 15:14