Имя: Пароль:
IT
Веб-мастеринг
Добавить массив в массив с ключом
, ,
0 antihacker
 
08.04.19
10:40
Всем  привет !

Вот код

$ary_main = array();

$ary_sub1 = array();

$ary_sub2 = array();
$ary_sub2["id"] = 'HONDA1';
$ary_sub1[0] = ($ary_sub2);


$ary_sub2 = array();
$ary_sub2["id"] = 'HONDA2';
$ary_sub1[1] = ($ary_sub2);


array_push($ary_main, $ary_sub1);
array_push($ary_main, $ary_sub1);

echo json_encode($ary_main);

Результат - [[{"id":"HONDA1"},{"id":"HONDA2"}],[{"id":"HONDA1"},{"id":"HONDA2"}]];

Мне нужен - ["1":[{"id":"HONDA1"},{"id":"HONDA2"}],"2":[{"id":"HONDA1"},{"id":"HONDA2"}]]
Что бы можно было сортировать на стороне 1С
И вообще правильный ли формат JSON - а яотправляю ? Сможет ли 1С прочесть ?
1 antihacker
 
08.04.19
10:40
Ой опечатка в ключах

Мне нужен - ["0":[{"id":"HONDA1"},{"id":"HONDA2"}],"1":[{"id":"HONDA1"},{"id":"HONDA2"}]]
2 Asmody
 
08.04.19
10:45
Вот это ["1":[{"id":"HONDA1"},{"id":"HONDA2"}],"2":[{"id":"HONDA1"},{"id":"HONDA2"}]]  - не JSON
3 antihacker
 
08.04.19
10:48
$ary_main[0]['1'] = ($ary_sub1);
$ary_main[1]['2']  = ($ary_sub1);

Вот исправил. Получил - [{"1":[{"id":"HONDA1"},{"id":"HONDA2"}]},{"2":[{"id":"HONDA1"},{"id":"HONDA2"}]}]
Это что ?
4 Asmody
 
08.04.19
10:50
(3) это JSON, но у тебя получился массив из одного объекта, в котором два свойства типа массив объектов.
5 Вафель
 
08.04.19
10:51
проверь любым онлайн валидатором
6 Asmody
 
08.04.19
10:53
валидатор JSON в любом браузере по кнопке F12
7 antihacker
 
08.04.19
10:55
Asmody, не очень понял
8 Asmody
 
08.04.19
10:59
нажимаешь F12, переходишь на закладку Консоль, пишешь

JSON.parse('<тут вставляешь свой JSON>')

нажимаешь Enter. В консоли должен появиться Array, раскрываешь, смотришь структуру, сравниваешь
9 Ванпанчмен
 
08.04.19
16:49
(0) Так нельзя как ты хочешь. Суть JSON-массива в том, что у него нет определенного порядка жестко привязанного к элементам массива. Если хочешь чтобы были ключи, то это уже будет не массив, а объект.
Запомни основной принцип:
Доступ к элементам массива происходит через перебор в цикле. Доступ к элементам объекта происходит через прямое обращение через ключ.
Если приходится обращаться к элементам массива по ключу, это явный признак что ты его используешь не по назначению.

Так что или используй объект вместо массива, или не используй ключи.
10 dezss
 
08.04.19
17:01
(4) У него получился массив из 2-х объектов, а не из одного.
(9) Соглашусь, но не до конца. Он делает массив объектов, в котором есть поле для сортировки, кривовато делает)))

(3) Единственное, тебе придется десериализовывать его в соответствие, а не в структуру, так как у структуры не может быть ключей, начинающихся с цифры. И сортировать все равно не сможешь. Чтобы сортировать, тебе надо в объект добавить поле "sort", например. И в него уже пихать значение для сортировки)
11 Ванпанчмен
 
08.04.19
17:15
(10) Ну да. Вот так можно было бы сделать:

[{"sort":"0","sub1":[{"id":"HONDA1"},{"id":"HONDA2"}]},{"sort":"1", sub1:[{"id":"HONDA1"},{"id":"HONDA2"}]}]
Ошибка? Это не ошибка, это системная функция.