Changing values in a multi-dimensional array via reference (in PHP)? -
the following php function finds node in multi-dimensional array matching key:
<?php function & findbykey($array, $key) {     foreach ($array $k => $v) {         if(strcasecmp($k, $key) === 0) {             return $array[$k];         } elseif(is_array($v) && ($find = findbykey($array[$k], $key))) {             return $find;         }     }      return null; }   $array = [     'key1' => [         'key2' => [             'key3' => [                 'key5' => 1             ],             'key4' => '2'         ]     ] ];  $result = findbykey($array, 'key3');   i want function return reference node if change $result original $array changes (like javascript objects).
<?php array_splice($result, 0, 0, '2');  //changes $array since `$result` reference to: $array['key1']['key2']['key3']   how can this?
you need 2 things:
1) specify $array parameter reference:
function & findbykey(&$array, $key) {   2) assign variable $result reference using &:
$result = &findbykey($array, 'key3');   since calling function recursively, need assign $find reference well.
altogether:
function & findbykey(&$array, $key) {     foreach ($array $k => $v) {         if(strcasecmp($k, $key) === 0) {             return $array[$k];         } elseif(is_array($v) && ($find = &findbykey($array[$k], $key))) {             return $find;         }     }      return null; }   $result = &findbykey($array, 'key3'); $result = 'changed'; print_r($array);      wiki
Comments
Post a Comment