array_merge 不适用于 2 个特殊的 json 数组
array_merge does not work for 2 special json arrays
有 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",
"b": "1"
},
{
"a": "BAAR3",
"b": "111111"
},
{
"a": "BAAR4",
"b": "3"
},
{
"a": "BAAR5",
"b": "3"
},
{
"a": "BAAR6",
"b": "222222"
}
]
}
我从服务器上的路径读取文件,然后对每个读取文件使用 json_decode,然后使用 array_merge
我认为我的 json 数组 ("J"[=37=]) 的名称造成了问题
这是我的代码:
//
$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 中的第二个 json 数组($mJsonArr_M0_C
)
我该如何解决这个问题?
这就是 array_merge
的工作方式:documentation 状态:
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one.
像“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);
有 2 个 json 数组,需要合并它们,但 array_merge 不起作用
我已经搜索并找到了可以真正与 array_merge
这是我的 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",
"b": "1"
},
{
"a": "BAAR3",
"b": "111111"
},
{
"a": "BAAR4",
"b": "3"
},
{
"a": "BAAR5",
"b": "3"
},
{
"a": "BAAR6",
"b": "222222"
}
]
}
我从服务器上的路径读取文件,然后对每个读取文件使用 json_decode,然后使用 array_merge
我认为我的 json 数组 ("J"[=37=]) 的名称造成了问题
这是我的代码:
//
$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 中的第二个 json 数组($mJsonArr_M0_C
)
我该如何解决这个问题?
这就是 array_merge
的工作方式:documentation 状态:
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one.
像“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);