PHP - 将对象与JSON文件中的现有对象合并

时间:2017-06-24 02:11:18

标签: php arrays json object

我正在尝试将键和值附加到数组中的现有JSON对象,但无法弄清楚我做错了什么。我在这里阅读了几个主题但找不到与我的问题相关的任何内容。

这就是JSON文件的样子:

{  
"23-06-2017":{  
    "1:1":"text",
    "1:2":"text",
    "1:3":"text"
  },
"24-06-2017":{  
    "1:1":"text",
    "1:2":"text",
    "1:3":"text"
  }
}

所以有一个日期(23-06-2017)的数组,里面有键和值。 "1:1": "text"

这就是我的代码的样子:

<?php

$testArray = explode(',' $_POST['javascript_array_string']);
$testText = $_POST['testText'];
$testDate = $_POST['testDate'];

$foo = array();

   foreach($testArray as $value){
         $foo[$value] = "text";
   }

$oldJSON = file_get_contents("json/test.json");
$tempArray = json_decode($oldJSON, true);

//array_push($tempArray, $foo);       // Tried this and it adds a new array
//$tempArray[$testDate] = $foo;      //This just replaces the old keys with new ones.

array_merge($tempArray[$testDate], $foo);  //And with this one, nothing happens.


$jsonData = json_encode($tempArray);
file_put_contents("json/test.json");

?>

$_POST['javascript_array_string']看起来像1:1,1:2,1:3

任何帮助表示赞赏!

更新:已添加var_dump($tempArray)以及$testDate

的值
array(2) { ["23-06-2017"]=> array(3) { ["2:17"]=> string(4) "ille" ["2:18"]=> string(4) "ille" ["2:19"]=> string(4) "ille" } ["24-06-2017"]=> array(1) { ["1:17"]=> string(4) "ille" } }

和$ testDate的值为24-06-2017

更新#2:所以要澄清并帮助您了解我正在尝试做什么..

我想要这些新的(唯一)键和相应的值:$foo

与现有的JSON对象合并:$tempArray

这样

{
 "24-06-2017":{
     "1:1":"text"
 }
}

变为

{
"24-06-2017":{
    "1:1":"text",
    "1:2":"newValue",
    "1:3":"anotherValue"
  }
}

1 个答案:

答案 0 :(得分:0)

array_merge创建一个新的合并数组。如果要修改其中一个源数组,则必须分配array_merge的结果。

$tempArray[$testDate] = array_merge($tempArray[$testDate], $foo);

示例:

<?php

$testArray = [
  "24-06-2017" => [
    "1:1" => "text"
  ]
];


$foo = [
  "1:2" => "text",
  "1:3" => "text"
];


$testArray['24-06-2017'] = array_merge($testArray['24-06-2017'], $foo);

var_dump($testArray);

输出:

array(1) {
  ["24-06-2017"]=>
  array(3) {
    ["1:1"]=>
    string(4) "text"
    ["1:2"]=>
    string(4) "text"
    ["1:3"]=>
    string(4) "text"
  }
}