Как заменить каждый элемент, не меняя структуру массива? - PullRequest
0 голосов
/ 17 сентября 2010
$array = array('lastname', 'email', 'phone');

Как мне запустить foreach для этого массива и записать обновленное значение на его место?

Как:

foreach ($array as $item) {
   // do something
   // replace old value of this item with a new one
}

Пример:

foreach ($array as $item) {
    if (item == 'lastname')
        $item = 'firstname';
        // replace current $item's value with a 'firstname'
}

Массив должен стать:

$array = array('firstname', 'email', 'phone');

Ответы [ 4 ]

4 голосов
/ 17 сентября 2010

Альтернативой является цикл по ссылке:

foreach ($array as &$value) {
    $value = strtoupper($value);
}
unset($value);// <=== majorly important to NEVER forget this line after looping by reference...
2 голосов
/ 17 сентября 2010

В вашем примере цикл foreach может показаться ненужным, если вы точно знаете, какой ключ отображается на lastname, но если вам нужно, вы все равно можете перебирать значения.Есть два очень распространенных способа: установить значение в соответствии с ключом:

foreach ($array as $key => $value) {
    if ($value == 'lastname') {
        $array[$key] = 'firstname';
    }
}

или (только PHP 5) использовать ссылки:

foreach ($array as &$item) {
    if ($item == 'lastname') {
        $item = 'firstname';
    }
}

// Clean up the reference variable
unset($item);
1 голос
/ 17 сентября 2010
foreach ($array as $i => $value) {
    if ($value == 'lastname')
        $array[$i] = 'firstname';
}
1 голос
/ 17 сентября 2010

Вы можете сделать это так:

foreach ($array as $key => $item) {
   $array[$key] = "updated item";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...