2017-07-14 27 views
-1

既存のJSON配列に別の項目を挿入したいと思います。 「ギャラリー1」または「ギャラリー2」などでPHP - ネストされたJSON配列に項目を追加する

{ 
    "gallery": [ 
    { 
        "titel": "Gallery 1", 
        "thumb": "http://via.placeholder.com/150x150", 
        "images": [{ 
            "image": "http://via.placeholder.com/150x150" 
          },{ 
            "image": "http://via.placeholder.com/150x150" 
          },{ 
            "image": "http://via.placeholder.com/150x150" 
          },{ 
            "image": "http://via.placeholder.com/150x150" 
          },{ 
            "image": "http://via.placeholder.com/150x150" 
          },{ 
            "image": "http://via.placeholder.com/150x150" 
          }] 
    }, { 
        "titel": "Gallery 2", 
        "thumb": "http://via.placeholder.com/150x150", 
        "images": [{ 
            "image": "http://via.placeholder.com/150x150" 
          },{ 
            "image": "http://via.placeholder.com/150x150" 
          }] 
    } 
] 
} 

...広い画像が追加されます。

対応する「タイトル」に新しい画像を追加するにはどうすればよいですか?

+1

最も実用的なアプローチはJSON_DecodeでPHPオブジェクトにあなたのJSON文字列を変換するかもしれません()。その後、オブジェクトを直接操作したり、繰り返したりすることができます。私が良い例を見つけることができたら、ここに投稿します。 –

答えて

0

は、私はそれを行うだろうかです。ここでは例: https://iconoun.com/demo/temp_mrdoe.php

<?php // demo/temp_mrdoe.php 
 
/** 
 
* Dealing with JSON document 
 
* 
 
* https://stackoverflow.com/questions/45109267/php-add-item-in-nested-json-array 
 
*/ 
 
error_reporting(E_ALL); 
 
echo '<pre>'; 
 

 
// TEST DATA FROM THE POST AT STACK 
 
$json = <<<EOD 
 
{ 
 
    "gallery": [ 
 
    { 
 
        "titel": "Gallery 1", 
 
        "thumb": "http://via.placeholder.com/150x150", 
 
        "images": [{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          },{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          },{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          },{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          },{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          },{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          }] 
 
    }, { 
 
        "titel": "Gallery 2", 
 
        "thumb": "http://via.placeholder.com/150x150", 
 
        "images": [{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          },{ 
 
            "image": "http://via.placeholder.com/150x150" 
 
          }] 
 
    } 
 
    ] 
 
} 
 
EOD; 
 

 
// MAKE AN OBJECT FROM THE JSON STRING 
 
$obj = json_decode($json); 
 

 
// MAKE A NEW IMAGE OBJECT TO ADD TO "Gallery 2" IMAGES 
 
$img = new StdClass; 
 
$img->image = 'http://via.placeholder.com/THIS_IS_MY_NEW_IMAGE'; 
 

 
// FIND "Gallery 2" AND ADD THE NEW OBJECT 
 
foreach ($obj->gallery as $key => $g) 
 
{ 
 
    if ($g->titel == 'Gallery 2') 
 
    { 
 
     $g->images[] = $img; 
 
     $obj->gallery[$key] = $g; 
 
    } 
 
} 
 

 
// ACTIVATE THIS TO VISUALIZE THE MUTATED OBJECT 
 
// var_dump($obj); 
 

 
// BACK TO JSON 
 
$new = json_encode($obj, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); 
 
echo PHP_EOL . $new;

0

jsonに要素を追加する方法は次のとおりです。 jsonの文字列を配列のadd要素に変換し、必要に応じてjsonに再度変換します。

<?php 
    $str = '{ 
     "gallery": [ 
     { 
         "titel": "Gallery 2", 
         "thumb": "http://via.placeholder.com/150x150", 
         "images": [{ 
             "image": "http://via.placeholder.com/150x150" 
           },{ 
             "image": "http://via.placeholder.com/150x150" 
           }] 
     } 
    ]}'; 
    $str_arr = json_decode($str,true); 
    print_r($str_arr); 
    $str_arr['gallery'][0]['images'][] = ["image"=>"http://new_url.com/150x150"]; 
    print_r(json_encode($str_arr)); 
    ?> 

ライブデモ:ここhttps://eval.in/832742

+0

ワウ、とても速い!ちょうど私が探していたもの。私は実際にforeach(ギャラリー1 = [0]、ギャラリー2 = [1]など)で見つけることができる "[0]" 多くのありがとう:) –

0
function galleryAddItem($title) { 
    $str = file_get_contents('gallery_json.json'); 
    $json = json_decode($str, true); 
    $a = 0; 
    foreach ($json['gallery'] as $key) { 
      if ($key['titel'] == $title) { 
        $json['gallery'][$a]['images'][]['image'] = "test"; 
      } 
      $a++; 
    } 
    print_r(json_encode($json)); 
    file_put_contents('gallery_json.json', json_encode($json)); 

}

関連する問題