2017-02-01 5 views
1

次のような簡単な$arrayがあるとしましょう。連想配列の深いキーの値を変更する

$array = array(
    'a' => array(
     'b' => array(
      'c' => 'd' 
     ), 
     'e' => 'f' 
    ), 
    'g' => 'h' 
); 

$keys = array('a', 'b', 'c')任意アレイと値$value = 'i'を考えると、私はi$array['a']['b']['c']の値を変更したいと思います。

簡単にするために、のは$keysの要素が$keys[j]が存在し、$keys[j - 1]の子である、任意の正jため、すなわち、すべて有効であると仮定しましょう。

私は、配列への参照を渡してキーをループすることによって解決策を考え出しましたが、私の実装は少し醜いようです。これを行うための簡単な方法はありますか?

答えて

1
// current key index (starting at 0) 
$i = 0; 
// current array (starting with the outermost) 
$t = &$array; 

// continue until keys are exhausted 
while ($i < count($keys) - 1) { 

    // update array pointer based on current key 
    $t = &$t[$keys[$i++]]; 
} 

// update value at last key 
$t[$keys[$i]] = $value; 

http://sandbox.onlinephpfunctions.com/code/0598f00ab719c005a0560c18f91ab00154ba9453

+0

は '$トン=&$代わりarray'ではないでしょうか? – Pejman

+0

ええ、あなたは正しいです:)私はそれをテストしていて、あなたは私のバグを修正するのを助けました。 – dana

+1

ありがとうございました。最新のリビジョンは、私が思いついたものよりはるかに優れています! – Pejman

関連する問題