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

Тема в разделе "Как сделать...", создана пользователем funman, 22 мар 2014.

  1. funman

    funman Постоялец

    Регистр.:
    28 дек 2007
    Сообщения:
    146
    Симпатии:
    25
    Привет, мне на 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"

    Понимаю что задача простая, и буду рад за конкретный пример как реализовать подобное
     
    Последнее редактирование модератором: 25 мар 2014
  2. murlo

    murlo Создатель

    Регистр.:
    8 июн 2006
    Сообщения:
    34
    Симпатии:
    33
    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 нигде писать.
     
  3. funman

    funman Постоялец

    Регистр.:
    28 дек 2007
    Сообщения:
    146
    Симпатии:
    25
    По поводу "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 );

    ?>
     
  4. murlo

    murlo Создатель

    Регистр.:
    8 июн 2006
    Сообщения:
    34
    Симпатии:
    33
    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"}}}
     
    funman нравится это.