从PHP

时间:2015-09-04 13:37:30

标签: php arrays multidimensional-array

我有以下PHP数组,其中一些元素在外部数组中重复一次,在内部数组中重复一次:

        array(
            'content' =>
                array(
                    'car' => '1',
                    'house' => '2',
                    'name' => 'a_name',
                ),
            'restrictions' =>
                array(
                    'page_size' => 500,
                    'page_offset' => 0,
                ),
            'car' => '1',
            'house' => '2',
            'name' => 'a_partner_name',
            'criteria' => array(),
        );

我想知道如何执行以下操作(可能使用array_walk_recursive)?

完全从数组中删除元素,例如,如果我删除'car'元素,结果数组将是这样的(注意数组中的2'car'元素都被删除):

        array(
            'content' =>
                array(
                    'house' => '2',
                    'name' => 'a_name',
                ),
            'restrictions' =>
                array(
                    'page_size' => 500,
                    'page_offset' => 0,
                ),
            'house' => '2',
            'name' => 'a_partner_name',
            'criteria' => array(),
        );

为数组中的元素设置一个值,例如,如果我将'car'元素值从'1'更改为'2',则生成的数组看起来像(再次注意它在2个位置更改):

         array(
            'content' =>
                array(
                    'car' => '2',
                    'house' => '2',
                    'name' => 'a_name',
                ),
            'restrictions' =>
                array(
                    'page_size' => 500,
                    'page_offset' => 0,
                ),
            'car' => '2',
            'house' => '2',
            'name' => 'a_partner_name',
            'criteria' => array(),
        );

非常感谢!

1 个答案:

答案 0 :(得分:2)

使用references& )可以更轻松(尽管我不建议使用此类结构)和unset进行删除。

$innerArray = ['car' => 'some value'];

$outerArray = [
    'content' => &$innerArray,
    'car' => &$innerArray['car']
];

// change car to '2'
$outerArray['car'] = '2';
// is the same as
$innerArray['car'] = '2';
// is the same as
$outerArray['content']['car'] = '2';

// you can use this for deletion
function removeRecursive(&$array, $elem){
    foreach ($array as $key => &$value) {
        if($key === $elem)
            unset($array[$key]);
        elseif ($value instanceof Traversable || is_array($value))
            removeRecursive($value, $elem);
    }
}

removeRecursive($outerArray, 'car');