簡體   English   中英

PHP foreach兩次回顯特定數組項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM