2012-11-11 186 views
-1

我想问的问题只是出于好奇。为什么没有此代码的工作:使用foreach循环访问PHP数组

$table = [ 
    'key1' => 'value1', 
    'key2' => 'value2', 
]; 

foreach($table as $tb) 
{ 
    $tb = strtoupper($tb); 
} 

print_r($table); 
+3

你期望什么?错误是您的期望和实际结果之间的差异。只要你不期望任何事情,代码就可以工作。 – Oswald

+0

哇,我的错误,它在代码中是foreach($ table为$ tb),只是复制粘贴问题。 – user1615069

+0

不是很明显你还没有定义$ tbl。 – h0lyalg0rithm

回答

4

我相信你期待值上成为case..In你需要的foreach &这种情况下..

$table = [ 
    'key1' => 'value1', 
    'key2' => 'value2', 
]; 

foreach($table as &$tb) 
{ 
    $tb = strtoupper($tb); 
} 

print_r($table); 
+0

是的,确实如此。但为什么这样呢?我发布的代码中发生了什么?它肯定会改变循环中的数组值。它是否在循环关闭时删除它们? – user1615069

+1

'&'意味着你引用了一个变量,所以在这样的变量上做的动作将反映回原来的 –

+0

以及@Koen ... thnx .. –

1

您可以使用array_map

$table = [ 
    'key1' => 'value1', 
    'key2' => 'value2', 
]; 

$table = array_map("strtoupper", $table); 
print_r($table); 

如果你也有什么改变键为大写使用array_change_key_case

print_r(array_change_key_case($table, CASE_UPPER)); 
+0

有趣,谢谢。 – user1615069

+0

不客气 – Baba