如何更换每个项目,而不更改阵列的结构?

问题描述:

$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'); 
+2

您也可以尝试 Sourabh 2010-09-17 16:02:44

另一种方法是参照循环:

foreach ($array as &$value) { 
    $value = strtoupper($value); 
} 
unset($value);// <=== majorly important to NEVER forget this line after looping by reference... 
+0

+1用于突出显示unset()的重要性() – 2010-09-17 15:57:49

+0

“&$ value”内**&**是什么? – James 2010-09-17 16:07:47

+0

@快乐:这是一个参考,请参阅http://php.net/manual/en/language.references.php – Wrikken 2010-09-17 16:16:06

在您的例子,如果你确切地知道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); 

你可以做这样的:

foreach ($array as $key => $item) { 
    $array[$key] = "updated item"; 
} 

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