0

ネストされた配列の数/深さが不明な再帰配列のすべての値を変更しようとしています。私がつまずいているのは単なる構文だと思います。

基本的に、すべての新しい値で $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. これは配列をまったく出力しません

編集 OK-関数の呼び出し方法を変更しました:

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つのメソッドも機能しない理由をまだ理解していません.

4

1 に答える 1

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){

よろしく!

于 2013-02-16T03:19:51.830 に答える