JSON добавление элементов в цикле

funman

Знаток
Регистрация
28 Дек 2007
Сообщения
163
Реакции
26
Привет, мне на PHP нужно добавить новые элементы в массив
структура JSON

Код:
{"items":  {
        "nameid1":  {
            "searchable": "1",
            "state": "1",
         "group": "123",
            "name": "test"
        },
        "nameid2":  {
            "searchable": "1",
            "state": "1",
            "group": "4234",
            "name": "test232 "
        }
    }
}

Вопрос как на PHP в цикле типа while Добавить новые элементы "nameid".$i

пробовал вариант в цикле :
$js[]=array ("items"=> array ("nameid".$i=>array("searchable"=>1,"state"=>"1","group"=> "123" , "name"=> "test")));
echo json_encode( $js );

но получается совсем не та структура... мне нужно чтобы первый элементы "Items" прописывался 1 раз , а далее уже добавлялась структура "nameid"

Понимаю что задача простая, и буду рад за конкретный пример как реализовать подобное
 
Последнее редактирование модератором:
PHP:
$arr = array(
  array("searchable"=>1, "state"=>"1", "group"=> "1" , "name"=> "test1"),
  array("searchable"=>1, "state"=>"1", "group"=> "2" , "name"=> "test2"),
  array("searchable"=>1, "state"=>"1", "group"=> "3" , "name"=> "test3"),
);

$i = 0;
$res = array();
foreach($arr as $value){
  $i++;
  $res[] = array("nameid".$i => $value);
}

$res = json_encode($res);
$res = json_decode($res);

print_r($res);
Если запустишь, то увидишь что всё как у тебя в итоге. Не надо items нигде писать.
 
По поводу "items" нигде не нужно писать, так не получится изначально структура не мной придумана ) есть объект "items" и у него есть элементы "nameid" с набором разных полей.
и задача именно добавить новые элементы к объекту "items"... так как иначе импорт не пройдет...

В приведенном выше примере если вывести echo ($res); получается 1 массив с вложениями, нужно без него чтобы сохранить изначальную структуру

[{"nameid1":{"searchable":1,"state":"1","group":"1","name":"test1"}},{"nameid2":{"searchable":1,"state":"1","group":"2","name":"test2"}},{"nameid3":{"searchable":1,"state":"1","group":"3","name":"test3"}}]

получается это как бы 1 массив а не отдельные элементы как требуется :

{"items":
{
"nameid1": {"searchable": "1","state": "1","group": "123","name": "test"},
"nameid2": {"searchable": "1","state": "1","group": "4234","name": "test232 "}
}
}

у меня код немного другой , но также получается 1 массив с элементами, и даже если добавить объект "items" в начале получаемого текста в ручную , все равно получается другая структура, и она не проходит ((

PHP:
<?php

$i = 100;
while ($i <= 200) {

$amr[i] =  array (
     "type"=> "text",
         "desc"=>"someine",
         "data"=>"abc" 
);
$res[] = array("nameid".$i => $amr[i]);

    $i = $i+50;
}
  echo json_encode(  $res );

?>
 
PHP:
$arr = array(
  array("searchable"=>1, "state"=>"1", "group"=> "1" , "name"=> "test1"),
  array("searchable"=>1, "state"=>"1", "group"=> "2" , "name"=> "test2"),
  //array("searchable"=>1, "state"=>"1", "group"=> "3" , "name"=> "test3"),
);

$i = 0;
$t = new StdClass;
$s = new StdClass;
foreach($arr as $value){
  $i++;
  $n = 'nameid'.$i;
  $s->$n = (object) $value;
}
$t->items = $s;
$t = json_encode($t);
print_r($t); // {"items":{"nameid1":{"searchable":1,"state":"1","group":"1","name":"test1"},"nameid2":{"searchable":1,"state":"1","group":"2","name":"test2"}}}
 
Назад
Сверху