我有两个数据集。
首先:
{
"status": "OK",
"message": "Data Show Successful",
"name0": "Al",
"city": "",
"pree": "R",
"allknife": [
{
"name": "Folder",
"pos": "G",
"pos_le": "",
},
{
"name": "Folder Two",
"pos": "G",
"pos_le": "",
}
]
}
第二
{
"status": "OK",
"message": "Data Show Successful",
"name0": "",
"city": "",
"pree": "R",
"allknife": [
{
"name": "Folder",
"pos": "",
"pos_le": "R",
},
{
"name": "Folder Two",
"pos": "G",
"pos_le": "",
}
]
}
现在我将第二个数据集与第一个数据集进行比较。如果第二个数据集中的任何项目为空,那么我希望从第一个数据集中提取它。
例如,在第二个散列name0
中为空,因此应使用第一个散列中的值替换该值。 allknife
数组也应该使用相同的逻辑。
我无法理解如何实现它。我正在尝试使用array_merge(),但无济于事。
答案 0 :(得分:0)
由于你想用name2中的valie替换name0的值,你应该使用
array_replace(array1,array2)
答案 1 :(得分:0)
有许多事情可能会优化,但我留给你!
// Just a simple example
function arfill($example, $input){
foreach($input as $key => $value){
if($value == ""){
// Easy peasy set it
$input[$key] = $example[$key];
}
if(is_array($value)){
// Little recursion here
$input[$key] = arfill($example[$key], $input[$key]);
}
}
return $input;
}
答案 2 :(得分:0)
这是一个想法,从两个数组中删除空条目(array_filter_recursive())并使用array_replace_recursive()。
array_replace_recursive()用相同的值替换array1的值 来自以下所有数组的值。如果是第一个数组的一个键 存在于第二个数组中,其值将被该值替换 从第二个数组。如果密钥存在于第二个数组中,则不存在 第一个,它将在第一个数组中创建。如果只存在密钥 在第一个数组中,它将保持原样。如果是几个阵列 通过更换,他们将按顺序处理,后来 数组覆盖以前的值。
$arr1 = json_decode( $arr1, true );
$arr2 = json_decode( $arr2, true );
function array_filter_recursive( $input ) {
foreach ( $input as &$value ) {
if ( is_array( $value ) )
$value = array_filter_recursive( $value );
}
return array_filter( $input );
}
$arr = array_replace_recursive(
$arr1, $arr2, array_filter_recursive( $arr1 ), array_filter_recursive( $arr2 )
);
print_r( $arr );
/*
Array (
[status] => OK
[message] => Data Show Successful
[name0] => Al
[city] =>
[pree] => R
[allknife] => Array (
[0] => Array (
[name] => Folder
[pos] => G
[pos_le] => R
)
[1] => Array (
[name] => Folder Two
[pos] => G
[pos_le] =>
)
)
)
*/