PHP foreach两次回送特定的数组项

时间:2017-12-17 11:23:30

标签: php arrays foreach

我参加了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并且答案可以帮助我理解如何提取我想要的特定值(第一个键值对的值 - X)与foreach

5 个答案:

答案 0 :(得分:2)

发生了两件不同的事情:

  • 为每次迭代打印数组中的当前值
  • 每次迭代按键引用相同的项目

这个数组有两个项目:

$items = array(
    'item1' => 'X',
    'item2' => 'Y',
);

现在,如果使用foreach循环数组,则可以使用以下语法:

foreach ($items as $item) {
    echo $item . "<br>";
}

现在您正在使用$item,这是foreach中的当前项目。在这种情况下,这将为每次迭代打印2个不同的值:“X”和“Y”。

现在查看代码的第二部分:

foreach ($items as $item) {
    echo $items['item1'];
}

现在,您每次迭代都使用$items['item1'];。这意味着您引用$items中的项目,其中键item1的值为“X”。这就是你得到“X”和“X”的原因。

如果你想直接从$items获取一个项目,你可以这样做:

$items["item1"];

如果你想使用foreach来获取值为“X”的项目,并且你知道该键是“item1”,你可以这样做:

foreach ($items as $key => $item) {
    if ($key === "item1") {
        echo $item;
    }
}

答案 1 :(得分:1)

你应该知道foreach的另一个用例:

Foreach将遍历数组中的每个元素,以及每个{key&amp; amp; value}元素。

您可以使用以下代码:

$items = array(
    'item1' => 'X',
    'item2' => 'Y',
);

foreach ($items as $key => $value) {
    echo $key. ":" . $value . "<br>";
}

这将打印

  

ITEM1:X

     

ITEM2:Y

答案 2 :(得分:0)

对于每个项目,由于对象中有两个项目(循环运行两次),您将回显第一个项目。这就是它显示&#34; xx&#34;。

的原因

答案 3 :(得分:0)

foreach函数遍历数组的次数与数组中元素的数量一样多,为2(第一个元素为键item1,第二个元素为键item2)在你的例子中。

访问数组中第一个元素的代码是$items['item1'];,在打印/回显时会输出此键(item1)的值X

由于foreach函数迭代了两次,因此它在其中执行了两次代码,在您的情况下打印了一个值X(因此在迭代结束时打印两次)< / p>

只需提取特定值即可使用echo $items['item1']; (例如,在item1处提取值)没有foreach循环(因为你不需要遍历数组中的每个元素)

例如,您可以尝试以下代码:

<?php

$items = array(
    'item1' => 'X',
    'item2' => 'Y',
);

echo $items['item1'];

将具有以下输出

x

只有当您需要浏览所有数组才能执行某些功能,访问特定元素或甚至仅搜索您不需要使用{时,您才需要使用foreach {1}}因为php中有很多更好的数组函数。

答案 4 :(得分:0)

这就是我从代码中获得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