php foreach над массивом и присваивание этого массива - PullRequest
5 голосов
/ 18 декабря 2011

Я хочу добавить значение в массив во время его передачи:

foreach ($array as $cell) {
    if ($cell["type"] == "type_list") {
        $cell["list"] = $anObject;
        error_log(print_r($cell, TRUE), 0);
}
error_log(print_r($array, TRUE), 0);

Первый printr в порядке, но добавленный объект исчезает, когда я выхожу из цикла и выводит массив на печать.

Полагаю, это нормальное поведение, как лучше обойти эту "особенность"?

Ответы [ 2 ]

11 голосов
/ 18 декабря 2011

Просто позвоните $cell по ссылке так:

foreach($array as &$cell) {...}

И оно должно сохранить значение. Передача по ссылке .

4 голосов
/ 18 декабря 2011

Когда вы перебираете массив, $cell является копией значения, а не ссылкой, поэтому его изменение не повлияет на значение в массиве.$cell ссылка:

foreach ($array as &$cell) {
    if ($cell["type"] == "type_list") {
        $cell["list"] = $anObject;
        error_log(print_r($cell, TRUE), 0);
}
error_log(print_r($array, TRUE), 0);

Или доступ к элементам массива напрямую с помощью индекса.

foreach ($array as $i => $cell) {
    if ($array[$i]["type"] == "type_list") {
        $array[$i]["list"] = $anObject;
        error_log(print_r($array[$i], TRUE), 0);
}
error_log(print_r($array, TRUE), 0);
...