如何更改数组的索引名称

时间:2013-08-26 15:34:37

标签: php arrays multidimensional-array arraylist

我有一个多维数组,

我正在递归地改变我需要的数组值。

它适用于不是数组的键。

但不适用于数组的键。

如何更改一个值来测试像“one”=> “测试”,

$arr = array(
      'one' => array(
            array('something' => 'value'),
            array('something2' => 'value2'),
            'another' => 'anothervalue'
            ),
      'two' =>  array(
            array('something' => 'value'),
            array('something2' => 'value2'),
            'another' => 'anothervalue'
            )
       );

function update_something(&$item, $key)
{
    if($key == 'one')
        $item = 'test';
}

array_walk_recursive($arr, 'update_something');

预期的阵列结构

array(
          'one' => 'test',
          'two' =>  array(
                array('something' => 'value'),
                array('something2' => 'value2'),
                'another' => 'anothervalue'
                )
           );

UPDATE2

$html_structure = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        array(
            'tag' => 'div',
            'one' => array(
                'tag' => 'div',
                 array(
                    'tag' => 'span',
                    'style' => 'margin:10px; padding:10px',
                    'key' => 'title',
                ),
                'key' => 'subject',
            )
        )
    )
);

UPDATE3

$array = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        array(
            'tag' => 'div',
            'repeat' => array(
                'tag' => 'div',
                 array(
                    'tag' => 'span',
                    'style' => 'margin:10px; padding:10px',
                    'key' => 'title',
                ),
                'key' => 'subject',
            )
        )
    )
);



function update_recursively($array, $key = '', $value = array()) {
    //print_r($array); print_r($value);
    foreach ($array as $k => $v) {
        if ($k === $key){ 
            $array[$k] = $value;
        }
        elseif (is_array($v))
            $array[$k] = update_recursively($v);
    }
    return $array;
}

print_r(update_recursively($array, 'repeat', array('d' => 'a')));

2 个答案:

答案 0 :(得分:1)

如果数组不是太大,那么这样的东西就可以了:

function update_recursively($array) {
    foreach ($array as $k => $v) {
        if ($k === 'one')
            $array[$k] = 'test';
        elseif (is_array($v))
            $array[$k] = update_recursively($v);
    }

    return $array;
}

$updated_arr = update_recurisvely($arr);

但是如果它真的很大,你需要要小心,因为它可能变得缓慢和内存密集。请注意,它不会更新您的旧数组,如array_walk_recursive,它将返回更新版本。

*更新*

处理Update3场景的版本,我们指定要查找的键和值来替换它。

function update_recursively($array, $key = '', $value = array()) {
    foreach ($array as $k => $v) {
        if ($k === $key)
            $array[$k] = $value;
        elseif (is_array($v))
            $array[$k] = update_recursively($v, $key, $value);
    }
    return $array;
}

答案 1 :(得分:0)

您可以尝试:

function update_something(&$item, $key) {
    if($key == 'one') {
        array_splice($item,0,'test');
    }
}