我有这个密码:

$a = array ('zero','one','two', 'three');

foreach ($a as &$v) {

}

foreach ($a as $v) {
  echo $v.PHP_EOL;
}

有人能解释为什么输出是:

来自zend认证学习指南.

推荐答案

因为在第二个循环中,$v仍然是最后一个数组项的引用,所以每次都会被覆盖.

你可以这样看:

$a = array ('zero','one','two', 'three');

foreach ($a as &$v) {

}

foreach ($a as $v) {
  echo $v.'-'.$a[3].PHP_EOL;
}

如您所见,最后一个数组项接受当前循环值:"0"、"1"、"2",然后它就是"2"…:)

Php相关问答推荐

根据特定运输类别增加WooCommerce购物车总重量

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

PHP-转义字符串内的双反斜杠

PHP,ZipArchive删除一个空文件?

无法在WooCommerce中发送客户笔记邮箱通知

获取要删除的图像的公共ID

Sylius php -如何将购物车传递到小枝模板(Sylius模板事件)

为什么PHP PDO忽略NOT NULL约束?

显示自定义 Laravel 9 公共属性的错误

将一个表中的行连接为不同表MYSQL中的一列

htaccess 重定向子域错误的 url

WooCommerce 按产品运输插件:仅收取较高的运输费用

PHP向API发送curl请求

使用动态地址和动态文件创建zip文件并获取zip文件链接

为什么foreach循环会输出每个结果?

在这个 Laravel 应用中,如何仅显示已批准的 comments 回复?

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

来自 GoDaddy 的邮箱在 Gmail 中显示为via

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

password_verify 在 PHP 7.4 中有效,但在 PHP 8.2 中无效