Как через аргумент-ссылку функции вернуть ссылку?
Функция test получает на входе ссылку на массив. Функция рекурсивно чего-то делает и в итоге должна вернуть (через аргументы её самой) ссылки внутрь массива. Не важно чего она там делает... Пусть, надо вернуть ссылку или ссылки на случайные элементы массива. Вопрос - как вернуть через аргумент N2 (3,4,5..) ссылку на элемент массива, переданным как ссылку через аргумент N1? Нужно вернуть именно ссылку, а не копию куска массива. Т.к. после вызова функции по ссылкам должен меняться оригинальный массив.
выдает
(*) говорит о том, что $p['name']='HELLO'; оперирует копией куска массива $array. Т.е. из функции вернули не ссылку на массив, а копию. Но нужна ссылка. Если в (3) на месте (*) было бы написано HELLO, это была бы действительно копия.
Если делать так:
то результат будет таким, каким нужно, вернут действительно ссылку:
При возврате кучи нужных ссылок (в примере - один параметр) через массив все работает, но как бы тоже самое сделать через аргументы функции? Это надо, т.к. функция сама по себе рекурсивная и после нее разбирать массив не хочется (тем более, что list(,,,,)=$return ссылки вообще не обрабатывает).
Функция test получает на входе ссылку на массив. Функция рекурсивно чего-то делает и в итоге должна вернуть (через аргументы её самой) ссылки внутрь массива. Не важно чего она там делает... Пусть, надо вернуть ссылку или ссылки на случайные элементы массива. Вопрос - как вернуть через аргумент N2 (3,4,5..) ссылку на элемент массива, переданным как ссылку через аргумент N1? Нужно вернуть именно ссылку, а не копию куска массива. Т.к. после вызова функции по ссылкам должен меняться оригинальный массив.
Код:
function test1(&$array, &$point) {
$point=$array['item'];
}
$array=array(
'z'=>'zzz',
'item'=>
array(
'name'=>'111',
'title'=>'222',
),
);
test1($array, $p);
print_r($p); // (1)
$p['name']='HELLO';
print_r($p); // (2)
print_r($array); // (3)
Код:
Array
(
[name] => 111
[title] => 222
)
Array
(
[name] => HELLO
[title] => 222
)
Array
(
[z] => zzz
[item] => Array
(
[name] => 111 (*)
[title] => 222
)
)
Если делать так:
Код:
function test2(&$array) {
return array(&$array['item']);
}
$array=array(
'z'=>'zzz',
'item'=>
array(
'name'=>'111',
'title'=>'222',
),
);
$ret=test2($array);
print_r($ret[0]); // (4)
$ret[0]['name']='WORLD';
print_r($ret[0]); // (5)
print_r($array); // (6)
Код:
Array
(
[name] => 111
[title] => 222
)
Array
(
[name] => WORLD
[title] => 222
)
Array
(
[z] => zzz
[item] => Array
(
[name] => WORLD
[title] => 222
)
)