[英]PHP foreach echos a specific array item twice
我在teamtreehouse.com上學習了PHP基礎知識,並且在此課程中學習了PHP循環。 關於PHP foreach
循環,我編寫了下面的代碼:
<?php
$items = array(
'item1' => 'X',
'item2' => 'Y',
);
foreach ($items as $item) {
echo $item . "<br>";
}
X
ÿ
但是,當我嘗試以這種方式迭代foreach元素后以特定項目為目標時:
foreach ($items as $item) {
echo $items['item1'];
}
輸出是XX
而不是X
我的問題是為什么我要首先獲得XX
,而答案可以幫助我理解如何使用foreach
提取所需的特定值(第一個鍵值對X
的值)。
有兩種不同的情況正在發生:
該數組有2個項目:
$items = array(
'item1' => 'X',
'item2' => 'Y',
);
現在,如果使用foreach循環數組,則可以使用如下語法:
foreach ($items as $item) {
echo $item . "<br>";
}
現在,您正在使用$item
,這是foreach中的當前項。 在這種情況下,這將為每次迭代打印兩個不同的值:“ X”和“ Y”。
現在看一下代碼的第二部分:
foreach ($items as $item) {
echo $items['item1'];
}
現在您正在使用$items['item1'];
對於每次迭代。 這意味着您要使用$items
鍵的項item1
來引用該項,該項的值為“ X”。 這就是為什么您得到“ X”和“ X”的原因。
如果您不願意從$items
獲取$items
,則可以這樣進行:
$items["item1"];
如果要使用foreach獲取值為“ X”的項目,並且知道鍵為“ item1”,則可以例如執行以下操作:
foreach ($items as $key => $item) {
if ($key === "item1") {
echo $item;
}
}
您應該知道foreach的另一個用例:
Foreach將循環數組中的每個元素以及每個{key&value}元素。
您可以使用以下代碼:
$items = array(
'item1' => 'X',
'item2' => 'Y',
);
foreach ($items as $key => $value) {
echo $key. ":" . $value . "<br>";
}
這將打印
item1:X
item2:是
對於每個項目,由於對象中有兩個項目(循環運行兩次),因此您正在回顯第一個項目。 這就是為什么它顯示“ xx”的原因。
在您的示例中, foreach
函數遍歷數組的次數是數組中元素的數量的倍數,即元素2為2(第一個元素的鍵為item1
,第二個元素的鍵為item2
)。
訪問數組中第一個元素的代碼是$items['item1'];
在打印/回顯時,它將在此鍵( item1
)上輸出X
由於foreach
函數重復了兩次,因此它也執行了兩次它里面的代碼,在您的情況下,這是打印一個值X
(因此在迭代結束時打印兩次)
只需提取特定的值,您可以使用echo $items['item1']
; (例如,提取item1
值)而沒有foreach循環(因為您不需要遍歷數組中的每個元素)
例如,您可以嘗試以下代碼:
<?php
$items = array(
'item1' => 'X',
'item2' => 'Y',
);
echo $items['item1'];
將具有以下輸出
x
您將需要使用foreach
只有在情況下,當你需要經過所有的陣列來執行某些功能,用於訪問特定的元素,甚至只是搜索你不需要使用foreach
,因為有許多更好的功能在陣列的PHP。
這就是為什么我從代碼中得到XX
的原因。
<?php
$items = array(
'item1' => 'X',
'item2' => 'Y',
);
foreach ($items as $item) {
echo $items['item1'];
}
用表達式echo $items['item1'];
我指示循環否定'item2'
。 因此,它僅處理索引為'item1'
,但鑒於echo
是$items
的第一個值和['item1']
本身的回顯,因此該值將打印兩次:一次作為第一個的變量擴展$items
第二個值,以及使用['item1']
擴展第一個值本身。
這就是PHP的foreach
函數的構建方式。
為了確認這一理念,我做了以下事情:
$items = array(
'item1' => 'X',
'item2' => 'Y',
'item3' => 'Z',
);
foreach ($items as $item) {
echo $items['item1'];
}
並得到: XXX
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.