如何更改当前数组键的值

时间:2013-02-16 02:58:25

标签: php arrays

我正在尝试更改递归数组中的所有值,这些数组将具有未知数量/深度的嵌套数组。我认为这只是我绊倒的语法。

基本上我需要再次使用所有新值输出$ orgarray。

$orgarray = array(
    '101' => 'some-value',
    '102' => 'some-value',
    '103' => 'some-value',
    '104' => array(
        '201' => 'some-value',
        '202' => 'some-value',
        '203' => array(
            '301' => 'some-value',
            '302' => array(
                '401' => 'some-value',
                '402' => 'some-value',
                    '501' => array(
                    '502' => 'some-value',
                    '503' => 'some-value',
                    '504' => 'some-value',
                    '505' => 'some-value',
                    '506' => 'some-vaslue'
                    ),
                ),
            ),
        ),
    '105' => 'some-value',
    '106' => 'some-value',
    '107' => 'some-value'
);


function recursearray($array, &$modarray){

    foreach($array as $key => $value){

        if (is_array($value)){

            recursearray($value);
            // append keys to this nested array
                ???
        }else{

            // change current key's value
                ???

        }

    } 

}

recursearray($orgarray, $modarray);

echo '<pre>';
print_r($modarray);
echo '</pre>';

我在这里做错了什么?

  1. 我无法更改当前密钥的值

  2. 这将不会输出任何数组

  3. 修改的 好的 - 我改变了调用函数的方式:

    function recursearray($array, &$modarray){
        if(!isset($modarray)) {
            $modarray = array();
        }
    
        foreach($array as $key => $value){
    
            if (is_array($value)){
    
                recursearray($value, &$modarray);
                // append keys to this nested array
                // neither of these work
                array_push($value['newkey'] = 'new_value');
                $value['newkey'] = 'new_value';
    
    
            }else{
    
                // change current key's value
                $array[$key] = 'value';
    
            }
    
        } 
        return $array;
    }
    
    $modarray = recursearray($orgarray, $modarray);
    

    现在它几乎就在那里,但我仍然不明白为什么对该函数的原始调用不起作用(recursearray($ orgarray,$ modarray);)以及尝试向嵌套数组添加键的2个方法也不行。

1 个答案:

答案 0 :(得分:1)

我认为这样可行:

<?php    
function recursearray(&$array){
    foreach($array as $key => &$value){
       if (is_array($value)){
          recursearray($value);
       }else{
          $value = 'other-value';
       };
    };
};
?>

注意foreach($array as $key => &$value){

问候!