Изменить значение массива глобально, используя функцию - PullRequest
3 голосов
/ 29 января 2011

по какой-то причине мне нужно вызвать функцию для изменения определенного значения в массиве. Однако из кода, который я написал, значение изменяется только внутри функции и остается неизменным в глобальном масштабе. Интересно, что я пропустил что-то волшебное?

<?php
$test=array(0=>"a",1=>"b");

function myTest(){
$test[0]="c";
print_r ($test);
}

myTest();
print_r($test);
?>

В идеале вывод должен быть Массив ([0] => c [1] => b) Массив ([0] => c [1] => b)

Однако, из моего кода, результат Array ([0] => c) Array ([0] => a [1] => b) Мне не удалось изменить значение массива, а также потерял массив [1].

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Несмотря на то, что вы можете легко (и лениво) использовать ключевое слово global, чтобы это сработало, это очень не рекомендуется ( поиск переполнения стека, чтобы выяснить, почему ).

Вместо этого ваша функция должна принимать массив в качестве аргумента и возвращать модифицированный массив в качестве результата:

$test = array("a","b");

function myTest(array $test) {
   $test[0] = "c";
}

$test = myTest($test);
print_r($test);

будет отображать:

Array (
   [0] => c
   [1] => b
)

В качестве альтернативы, вы можете принять массив как ссылку и работать с ним напрямую (без необходимости возвращать и переназначать):

$test = array("a","b");

function myTest(array &$test) {
   $test[0] = "c";
}

myTest($test);
print_r($test);

Вывод будет одинаковым в обоих примерах.

2 голосов
/ 29 января 2011

Вам нужно, чтобы ваша функция использовала ключевое слово global:

function myTest(){
   global $test;
   $test[0]="c";
   print_r ($test);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...