2013-08-28 73 views
35

我有一個數據庫調用,我試圖找出循環中$key => $value的作用。

我問的原因是因爲這兩個代碼輸出相同的東西,所以我試圖理解爲什麼這樣寫。下面的代碼:

foreach($featured as $key => $value){ 
    echo $value['name']; 
} 

這種輸出爲:

foreach($featured as $value) { 
    echo $value['name'] 
} 

所以我的問題是,什麼是在foreach$key => $value或只是$value之間的差異。該陣列是多維的,如果這有所作爲,我只想知道爲什麼要在foreach循環中通過$key$value

+0

閱讀關於[PHP陣列(http://php.net/manual/en/language.types.array.php)和[的foreach(http://php.net/manual/en/control-structures .foreach.php)。在你的例子中,你不要在foreach中使用'$ key',所以你不妨去更簡單的版本。 –

+0

這裏是數組返回:'陣列( [0] =>數組([ID] => 7 [名稱] =>鞋類2 [縮略圖] => /images/dummy-thumb.jpg) [1] =>數組([id] => 1 [name] => Game 1 [thumbnail] => /images/dummy-thumb.jpg) =襯衫2 [縮略圖] => /images/dummy-thumb.jpg) )''的$ key'是'[0] [1] [2]'和'$ value'是'[ID] [名稱] [縮略圖]'正確嗎? – handmdmr

回答

56

好了,$key => $value在foreach循環是指在關聯數組的鍵值對,其中鍵用作確定值的索引而不是數字,如0,1,2,...在PHP中,關聯數組看起來像這樣:

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.); 

在PHP代碼:$featured是通過繞環關聯數組,和as $key => $value意味着每個時間循環運行並選擇來自陣列的鍵 - 值對,它存儲在本地$key變量到密鑰在循環塊內使用以及本地$value變量中的值。因此,對於上面的示例數組,foreach循環將達到第一個鍵值對,並且如果指定了as $key => $value,它將在$key變量中存儲'key1'變量,在$value變量中將存儲'value1'

既然你不使用$key變量的循環塊內,將它添加或移除它不會改變回路的輸出,但它是最好的,包括該鍵值對,以表明它是一個關聯數組。

另請注意,as $key => $value指定是任意的。你可以用as $foo => $bar代替它,只要你將循環塊內的變量引用改爲新變量$foo$bar,它就可以正常工作。但讓他們$key$value有助於跟蹤他們的意思。

+3

謝謝,這是我正在尋找的答案。當我看到它在循環塊中使用'$ key'時沒有使用這種方式時,它就讓我感到困惑。只是用它來表示它是一個關聯數組。我瞭解循環和數組的工作原理。只是不是爲什麼它沒有使用'$ key'變量而以這種方式使用。我一直在使用'$ key' var來查看它返回的內容。再次感謝你:) – handmdmr

+0

沒問題!很高興我能幫上忙。 – djiango

1

這裏$關鍵將包含$關鍵$值$相關功能。不同的是,現在你有這個鑰匙。

array("thekey"=>array("name"=>"joe")) 

這裏$值

array("name"=>"joe") 

$關鍵是 「thekey」

3

假設你有一個數組是這樣的:

$array = (0=>'123',1=>'abc','test'=>'hi there!') 

在你的foreach循環,每個循環是:

$key = 0, $value = '123' 
$key = 1, $value = 'abc' 
$key = 'test', $value = 'hi there!' 

這是偉大的那些時候,你需要知道的數組鍵。

+0

所以,我們這樣設置循環,因爲我們需要知道'$ key'的含義,因爲這是來自codeigniter模型中的函數。因此,稍後可能需要'$ key'。 – handmdmr

+0

正確。您也可以使用該鍵來更改該數組中該鍵的值,或者使用該鍵將數據添加到使用相同鍵的另一個數組中。 – aynber

2

如果陣列看起來像:

  • $特徵[ 「水果」] = 「橙色」;
  • $ featured [「fruit」] =「香蕉」;
  • $ featured [「vegetable」] =「carrot」;

的$鍵將保持每個數組值的類型(水果或蔬菜)(橙,香蕉或胡蘿蔔)

14

假設你有一個關聯數組是這樣的:

$a = array(
    "one" => 1, 
    "two" => 2, 
    "three" => 3, 
    "seventeen" => array('x'=>123) 
); 

在第一次迭代中:$key="one"$value=1

有時你需要這個鍵,如果你只想要這個值,你可以避免使用它。

在最後一次迭代:$key='seventeen'$value = array('x'=>123)所以進入這個array值的第一個元素的值,你需要一個key,X在這種情況下:$value['x'] =123

+0

你剛剛讓我的腦袋裏有燈泡,謝謝:) – handmdmr

+0

請將此答案標記爲已解決,謝謝:) –

+0

我喜歡這個解釋,但是如果不想要我想知道的關鍵值? – Nmaster88

5

不同的是,在

foreach($featured as $key => $value){ 
echo $value['name']; 
} 

你可以從他們的鍵值對操縱每次迭代的$key的價值。像@djiango回答,如果你沒有操縱每個值的$key,循環的結果將是完全一樣

foreach($featured as $value) { 
    echo $value['name'] 
} 

來源: 您可以從PHP Documentation閱讀:

第一種形式循環由array_expression給出的數組。在每次迭代中,當前元素的值>賦值爲$值,內部數組指針前進> 1(因此在下一次迭代時,您將查看下一個元素)。第二種形式將在每次迭代時將當前元素的鍵另外分配給$ key變量。


如果您在操縱數據,比如說,用自定義鍵數組,你可以把它們打印到屏幕,像這樣:

$array = ("name" => "Paul", "age" => 23);

foreach($featured as $key => $value){ 
echo $key . "->" . $value; 
} 

應打印:

name->Paul

age->23

而且,您無法使用foreach($featured as $value)來輕鬆完成此操作。因此,考慮上面的格式以便於在需要時操作鍵。

乾杯

+0

哦,那個比任何答案都更有意義的男孩,現在我明白了這個背後的全部想法:D至少有點類似:D活得很久,興旺我的朋友 –

8

一個非常重要的地方,它是REQUIRED使用key => value一對在foreach環是被提及。假設你想一個新/子 - 元素(在另一個關鍵)的$features陣列添加到現有的項目。你應該做到以下幾點:

foreach($features as $key => $feature) { 
    $features[$key]['new_key'] = 'new value'; 
} 


取而代之的是:

foreach($features as $feature) { 
    $feature['new_key'] = 'new value'; 
} 

這裏不同的是,在第一種情況下,你是通過主訪問數組的子值陣列本身有到當前正在由該陣列指針指向的元素。

當在第二(其不用於這一目的工作)你在陣列中的子值分配給臨時變量$feature這是每次循環迭代之後未設置。

相關問題