Удалить, добавить элемент в json объект (массив)

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
На php создал многомерный индексированный массив (вложенные массивы ассоциативные).
Перегнал этот массив через json_encode в браузер:
Код:
echo var arr_data = ".json_encode( $arr_data ).";
В браузере он вывелся. Работать можно.
Но мне нужно сделать следующее:
1. Удалить конкретный элемент. Номер его не известен. Известен только id.
2. добавить новый элемент.
Работать, как с массивом через методы не получается.
 
Может не стоит мешать все и сразу, а передавать в javascript обычные массивы, разбив ассоциативные? Так же из описания не совсем понятно, какие именно массивы вы кидаете в javascript, думаю на выходе вы имеете массив объектов. И работать с ними надо соответственно(с массивами как с Для просмотра ссылки Войди или Зарегистрируйся, с объектами как с Для просмотра ссылки Войди или Зарегистрируйся).
 
Может не стоит мешать все и сразу, а передавать в javascript обычные массивы, разбив ассоциативные? Так же из описания не совсем понятно, какие именно массивы вы кидаете в javascript, думаю на выходе вы имеете массив объектов. И работать с ними надо соответственно(с массивами как с Для просмотра ссылки Войди или Зарегистрируйся, с объектами как с Для просмотра ссылки Войди или Зарегистрируйся).
Вот, что приходит в браузер от json_encode().
Код:
{"1":{"id":"1","id_user":"9","id_day":"1","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"2":{"id":"2","id_user":"9","id_day":"2","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"3":{"id":"3","id_user":"9","id_day":"3","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"4":{"id":"4","id_user":"9","id_day":"4","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"5":{"id":"5","id_user":"9","id_day":"5","start_t_minute":"660","end_t_minute":"900","start_clock":"11:00","end_clock":"15:00"},"6":{"id":"6","id_user":"9","id_day":"6","start_t_minute":"720","end_t_minute":"780","start_clock":"12:00","end_clock":"13:00"},"11":{"id":"11","id_user":"9","id_day":"1","start_t_minute":"1140","end_t_minute":"1320","start_clock":"19:00","end_clock":"22:00"}}
Нужно удалять, добавлять элементы.
А также делать перебор элементов (1,2,3,6,11,15) на проверку некоторых параметров его значений.
Удалять то получается. Добавлять тоже получается, указав id вручную, например, "11", но не знаю как указать id автоматичеки, по нарастающей. А также не знаю как сделать перебор.

Проще может быть перегнать весь этот цирк в обычный массив?
Нашел код в инете по перебору, но не получилось ничего...
 
Последнее редактирование:
Добрый день,
var obj = <?=json_encode($data)?>; // тут вы получаете в итоге обычный javascrip объект, соответственно вы к нему можете обращаться так же как к любому объекту. те типа obj["some_id"], obj.some_id - ну я так понял вы это занете.
Код:
//Удалять:
//prop_name - название свойства
delete myJSONObject.prop_name; // или
delete myJSONObject['prop_name'];

//Добавить:
var element ={}, cart =[];
element.id = id;
element.quantity = quantity;
cart.push(element);
А для перебора объекта я вот использовал примерно вот это: Для просмотра ссылки Войди или Зарегистрируйся (искал в поисковике по javascript loop thru object). Может это вам поможет.

Код:
//Заменил немного то что по ссылке на названия другие (my_object - ваш объект полученный из json_encode)
for (var key in my_object) {
   var obj = my_object[key];
   for (var prop in obj) {
     // важная проверка на то является ли это собственным свойством объекта на не унаследованым
     if(obj.hasOwnProperty(prop)){
       alert(prop + " = " + obj[prop]); //тут ваше действие над свойством
     }
   }
}
 
а как узнать и назначить уникальный id? В массив добавил, там автоматом ключ уникальный... а у объекта вручную приходится...
 
Может тогда стоит хранить объекты в массиве?
var arr_data = [object1, object2, object3];

Только не просто json_encode использовать придется, а пробежаться foreach по $arr_data и уже значения в json_encode. Получится массив с объектами. Думаю так будет удобнее, в случае необходимости добавки дополнительных элементов с уникальными ключами.
 
Может тогда стоит хранить объекты в массиве?
var arr_data = [object1, object2, object3];

Только не просто json_encode использовать придется, а пробежаться foreach по $arr_data и уже значения в json_encode. Получится массив с объектами. Думаю так будет удобнее, в случае необходимости добавки дополнительных элементов с уникальными ключами.
а как получить массив объектов? Объекты то получаются при перегоне с сервера на браузер. Если на сервере это буду делать, тоже самое и выйдет, объект с объектами...
 
а как получить массив объектов? Объекты то получаются при перегоне с сервера на браузер. Если на сервере это буду делать, тоже самое и выйдет, объект с объектами...
json_encode создает javascript-массив из числовых PHP массивов и javascript-обьект из ассоциативных PHP массивов.
В вашем случае можно сделать так:
PHP:
$returnValue = json_encode(array(
  array('id' => 1, 'bla' => 'bla1'),
  array('id' => 2, 'bla' => 'bla2'),
  array('id' => 3, 'bla' => 'bla3'),
  array('id' => 4, 'bla' => 'bla4')
));

из этого получится такой json:
Код:
[{"id":1,"bla":"bla1"},{"id":2,"bla":"bla2"},{"id":3,"bla":"bla3"},{"id":4,"bla":"bla4"}]
 
Назад
Сверху