我有两个看起来像这样的数组
Array1
[
"008feb2f-0361-4d94-8559-8ea5074d1c59" => [
"2707bd40-d421-400d-ba55-694632facadd" => [],
"307e97e0-be81-4644-b842-dcd23e88d09f" => []
],
"86a11097-a9a7-4d84-8ffc-c9c382326f51" => []
]
Array2
[
"c961c734-eae2-4fea-86bf-d543c57b0ab0" => [
"008feb2f-0361-4d94-8559-8ea5074d1c59" => [],
"86a11097-a9a7-4d84-8ffc-c9c382326f51" => []
],
"651e505c-7e24-4646-8fe0-59b4ee58f078" => [],
"eb4d76ca-f819-4828-95d3-777e0a4bf748" => []
]
数组2是父数组,即整个索引在任何索引的某个地方都是Array2的一部分。 我想替换Array2中等于Array1索引的索引值,例如:
008feb2f-0361-4d94-8559-8ea5074d1c59
和
86a11097-a9a7-4d84-8ffc-c9c382326f51
分别。
输出应该是一个看起来像这样的最终数组
[
"c961c734-eae2-4fea-86bf-d543c57b0ab0" => [
"008feb2f-0361-4d94-8559-8ea5074d1c59" => [
"2707bd40-d421-400d-ba55-694632facadd" => [],
"307e97e0-be81-4644-b842-dcd23e88d09f" => []
],
"86a11097-a9a7-4d84-8ffc-c9c382326f51" => []
],
"651e505c-7e24-4646-8fe0-59b4ee58f078" => [],
"eb4d76ca-f819-4828-95d3-777e0a4bf748" => []
]
我尝试通过以下方式使用
array_replace()
array_replace_recursive()
foreach() loop
但徒劳的是,子数组可以存在于任何地方,例如在数组内或数组或n个数组内。
答案 0 :(得分:0)
您需要递归。然后,您将遇到array2中的每个键,并检查它是否与array1中的键匹配。匹配时,只需替换该键的值即可。我认为这些键总体上是唯一的。
这是您可以使用的功能:
function extend($array2, $array1) {
if (!is_array($array2)) return $array2;
foreach($array2 as $key => $value) {
$array2[$key] = isset($array1[$key]) ? $array1[$key] : extend($value, $array1);
}
return $array2;
}
对于您的示例,请这样称呼:
$array1 = [
"008feb2f-0361-4d94-8559-8ea5074d1c59" => [
"2707bd40-d421-400d-ba55-694632facadd" => [],
"307e97e0-be81-4644-b842-dcd23e88d09f" => []
],
"86a11097-a9a7-4d84-8ffc-c9c382326f51" => []
];
$array2 = [
"c961c734-eae2-4fea-86bf-d543c57b0ab0" => [
"008feb2f-0361-4d94-8559-8ea5074d1c59" => [],
"86a11097-a9a7-4d84-8ffc-c9c382326f51" => []
],
"651e505c-7e24-4646-8fe0-59b4ee58f078" => [],
"eb4d76ca-f819-4828-95d3-777e0a4bf748" => []
];
$result = extend($array2, $array1);
print_r($result);
答案 1 :(得分:0)
您可以先对数组进行展平,然后,只需按键即可查看展平的数组。
function array_flatten($array) {
$return = array();
foreach ($array as $key => $value) {
$return[$key] = $value;
if (is_array($value)){
$return = array_merge($return, array_flatten($value));
}
}
return $return;
}
function get_hidratated_array($toHidratate, $master) {
$result = [];
foreach($toHidratate as $key=>$value ){
if(isset($master[$key])) {
$result[$key] = $master[$key];
} else {
$result[$key] = hidratate_array($value, $master);
}
}
return $result;
}
$flat = array_flatten($array1);
$result = get_hidratated_array($array2, $flat);
print_r($result);