编辑关联数组,同时保留参考以准备JSON编码

时间:2011-11-27 02:06:22

标签: php json

是否有任何常用的方法来编辑关联数组,同时保留对原始数组的引用并使数组为JSON编码做好准备?

一种简单的方法是将数组重新排列为新数组,但我认为更好的做法是递归并实时编辑。

1 个答案:

答案 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次。

编辑:添加了向数组添加值和计算编辑的功能。