是否有任何常用的方法来编辑关联数组,同时保留对原始数组的引用并使数组为JSON编码做好准备?
一种简单的方法是将数组重新排列为新数组,但我认为更好的做法是递归并实时编辑。
答案 0 :(得分:0)
这是我使用PHP实时编辑JSON数组的函数:
function editJSON(&$target, &$aimer){
$found = false;
$result = 0;
foreach($aimer as $ak => $av){
foreach($target as $tk => $tv){
if ($tk == $ak){
$found = true;
$result = 1;
if (is_array($tv) && is_array($av)) editJSON($target[$tk], $aimer[$ak]);
}
if (!$found && is_array($tv)) $result += editJSON($target[$tk], $aimer);
}
if ($found && !is_array($av)) $target[$ak] = $av;
}
return $result;
}
快速且经过测试:
$target = array( 'z'=>array('v'=>1, 'c'=>2, 'g'=>3),
'b'=>array(
'a'=>array(
'b'=>array('g'=>array('c'=>11, 'd'=>13), 'b'=>array('x'=>91, 'y'=>92)),
'e'=>array('m'=>2)
)
),
'd'=>array(
'a'=>array(
'b'=>array('g'=>array('c'=>11, 'd'=>13))
)
)
);
$aimer = array(
'a'=>array(
'b'=>array('g'=>array('c'=>998, 'hh'=>999))
)
);
echo 'Target array:';
echo '<br />';
print_r($target);
echo '<br />';
echo 'Aiming array:';
echo '<br />';
print_r($aimer);
echo '<br />';
$result = editJSON($target, $aimer);
echo 'Resulting array:';
echo '<br />';
print_r($target);
echo '<br />';
echo 'JSON has been modified ' . $result . ' times.';
将输出:
目标阵列:
数组([z] =&gt;数组([v] =&gt; 1 [c] =&gt; 2 [g] =&gt; 3)[b] =&gt;数组([a] =&gt;数组([b] =&gt;数组([g] =&gt;数组([c] =&gt; 11 [d] =&gt; 13)[b] =&gt;数组([x] =&gt; 91 [y] =&gt; 92))[e] =&gt;数组([m] =&gt; 2)))[d] =&gt;数组([a] =&gt;数组([b] =&gt;数组([g ] =&gt;数组([c] =&gt; 11 [d] =&gt; 13)))))
瞄准阵列:
数组([a] =&gt;数组([b] =&gt;数组([g] =&gt;数组([c] =&gt; 998 [hh] =&gt; 999))))
产生的数组:
数组([z] =&gt;数组([v] =&gt; 1 [c] =&gt; 2 [g] =&gt; 3)[b] =&gt;数组([a] =&gt;数组([b] =&gt;数组([g] =&gt;数组([c] =&gt; 998 [d] =&gt; 13 [hh] =&gt; 999)[b] =&gt;数组([x] =&gt; 91 [y] =&gt; 92))[e] =&gt;数组([m] =&gt; 2)))[d] =&gt;数组([a] =&gt;数组([b] =&gt;数组([g] =&gt;数组([c] =&gt; 998 [d] =&gt; 13 [hh] =&gt; 999)))))
JSON已被修改2次。
编辑:添加了向数组添加值和计算编辑的功能。