Установка значения во вложенном массиве Php - PullRequest
0 голосов
/ 07 января 2010

Привет. Я пытаюсь перебрать массив и установить значение ключа. Очень простой вопрос.

Код, который я пробовал, приведен ниже.

http://pastebin.com/d3ddab156

<?php
$testArray = array("bob1" => array( 'name' => "bob1", 'setTest' => '2'));

foreach($testArray as $item)
{
    $item['setTest'] = 'bob';
} 

print_r($testArray);

Я полагаю, что мне здесь не хватает чего-то глупого, и это будет Д'Ох момент для меня. Что с ним не так?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Вы делаете:

$testArray = array("bob1" => array( 'name' => "bob1", 'setTest' => '2'));    

foreach($testArray as $item)
{
    $item['setTest'] = 'bob';
} 

print_r($testArray);

$ item является копией. Вы меняете копию, а не реальный массив. Попробуйте это:

$testArray = array("bob1" => array( 'name' => "bob1", 'setTest' => '2'));    

foreach($testArray as $key => $item)
{
    $testArray[$key]['setTest'] = 'bob';
} 

print_r($testArray);
1 голос
/ 07 января 2010

Или, если у вас много данных в массиве и вы хотите избежать создания полной копии каждого элемента на каждой итерации, просто итерируйте каждый элемент в качестве ссылки. Затем в памяти создается только ссылка на этот элемент, и вы можете напрямую манипулировать элементом массива, используя $ item:

$testArray = array("bob1" => array( 'name' => "bob1", 'setTest' => '2'));    

foreach($testArray as &$item)
{
    $item['setTest'] = 'bob';
} 

print_r($testArray);

ПРИМЕЧАНИЕ. Обязательно сбрасывайте $ item после цикла, чтобы впоследствии случайно не изменить массив, используя это имя переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...