微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

array_merge不适用于2个特殊的json数组

如何解决array_merge不适用于2个特殊的json数组

有2个json数组,需要合并它们,但 array_merge 不起作用
搜索并找到了可以与array_merge真正合并的json数组

以下是我的json数据,位于单独的文件中:

{
  "J": [
    {
      "a": "BAAB1","b": "English"
    },{
      "a": "BAAB2","b": "1"
    },{
      "a": "BAAB3","b": "L"
    },{
      "a": "BAAB4","b": "Test1 ..."
    },{
      "a": "BAAB5","b": "Test2 ..."
    },{
      "a": "BAAB6","b": "Test3 ..."
    }
  ]
}

并且:

{
  "J": [
    {
      "a": "BAAR1","b": "T1"
    },{
      "a": "BAAR2",{
      "a": "BAAR3","b": "111111"
    },{
      "a": "BAAR4","b": "3"
    },{
      "a": "BAAR5",{
      "a": "BAAR6","b": "222222"
    }
  ]
}

我从服务器上的路径读取文件,然后对每个读取的文件使用 json_decode ,然后使用 array_merge
我认为我的json数组的名称“ J” )造成了问题

这是我的代码

//
$mLanguageFileName = $mClass_GeneralFunctions_General->GetStringBetween($mReadFile,"^^^","^^^^");
$mLanguageFile_Address = $ServerRoot_base.'/LAN/'.$mLanguageFileName.'.json';                
$mClass_GeneralFunctions_FileFunctions = new GeneralFunctions_FileFunctions();
$mJSONFile_Language_C = $mClass_GeneralFunctions_FileFunctions->ReadFile($mLanguageFile_Address);
      
//
$mThemeFileName_M0 = $mClass_GeneralFunctions_General->GetStringBetween($mReadFile,"^^^^","^^^^^");
$mThemeFile_M0_Address = $ServerRoot_base.'/M0T/'.$mThemeFileName_M0.'/'.$mThemeFileName_M0.'.json';  
$mClass_GeneralFunctions_FileFunctions = new GeneralFunctions_FileFunctions();
$mJSONFile_M0_C = $mClass_GeneralFunctions_FileFunctions->ReadFile($mThemeFile_M0_Address);          

//        

$mJsonArr_M0_C = json_decode($mJSONFile_M0_C,true);
$mJsonArr_Language_C = json_decode($mJSONFile_Language_C,true);

echo "\n\nmerge ... ";

$L = sizeof($mJsonArr_M0_C["J"]);
for ($i = 0; $i< $L; $i++)
{
    echo "\n\nmJsonArr_M0_C i = {$i} ";
    echo "\nmJsonArr_M0_C a = {$mJsonArr_M0_C["J"][$i]["a"]} ";
    echo "\nmJsonArr_M0_C b = {$mJsonArr_M0_C["J"][$i]["b"]} ";
    
}

$L = sizeof($mJsonArr_Language_C["J"]);
for ($i = 0; $i< $L; $i++)
{
    echo "\n\nmJsonArr_Language_C i = {$i} ";
    echo "\nmJsonArr_Language_C a = {$mJsonArr_Language_C["J"][$i]["a"]} ";
    echo "\nmJsonArr_Language_C b = {$mJsonArr_Language_C["J"][$i]["b"]} ";
    
}

$mJsonArr_C_LanguageM0 = array_merge($mJsonArr_Language_C,$mJsonArr_M0_C);         

for ($i = 0; $i< sizeof($mJsonArr_C_LanguageM0["J"]); $i++)
{
    echo "\n\nmJsonArr_C_LanguageM0 i = {$i} ";
    echo "\nmJsonArr_C_LanguageM0 a = {$mJsonArr_C_LanguageM0["J"][$i]["a"]} ";
    echo "\nmJsonArr_C_LanguageM0 b = {$mJsonArr_C_LanguageM0["J"][$i]["b"]} ";
    
}

每个json数组的数据都是真实回显,但合并数据只是 array_merge $mJsonArr_M0_C

中的第二个json数组

我该如何解决问题?

解决方法

array_merge应该这样工作:documentation指出:

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。

“ J”之类的键就是这种情况:它是一个字符串键。

在您提出的情况下,array_merge_recursive完成了这项工作。例如:

$a = json_decode('{ "J": [{ "a": "BAAB1","b": "English" }] }',true);
$b = json_decode('{ "J": [{ "a": "BAAR1","b": "T1" }] }',true);
$merged = array_merge_recursive($a,$b);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。