繁体   English   中英

PHP中的数组指针

[英]Array Pointer in PHP

我对 PHP 中的数组指针有点困惑。 下面的代码工作正常:

$ages = [1, 3, 5];
while($age = current($ages)) {
  echo $age . ", ";
  next($ages);
}

但我不知道为什么下面的代码没有打印出任何东西:

$ages = [];
for($i = 0; $i < 10; $i++) {
  $ages[] = $i;
}
while($age = current($ages)) {
  echo $age . ", ";
  next($ages);
}

我也尝试用 for 循环打印,但在下面的代码中只打印了 for 循环,while 循环仍然没有打印。

$ages = [];
for($i = 0; $i < 10; $i++) {
  $ages[] = $i;
}
for($i = 0; $i < 10; $i++) {
  echo $ages[$i] . ", ";
}
while($age = current($ages)) {
  echo $age . ", ";
  next($ages);
}

我真的不知道为什么它会这样,有人可以帮助我吗?

为什么它的行为是这样的

Tl; dr:因为新创建的数组的第一个元素是0并且赋值运算符返回分配给变量的值,这导致表达式评估为false ,因此 while 循环的主体永远不会运行。


运行 for 循环后,接收到的数组将是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

首先, current($ages)的调用将返回新创建的数组的第一个元素0 ,然后赋值运算符=将返回分配给$age变量的值,即0 然后,代码将是:

while(0) {
  echo $age . ", ";
  next($ages);
}

0被评估为 false,这就是循环体永远不会运行的原因。 因此没有输出到屏幕。

您将需要检查current()的结果是否与布尔值false不同(意味着光标未找到该元素),而不仅仅是分配其值。 当值为0 ,您会得到while(0) ,这会中断循环。

$ages = [];
for($i = 0; $i < 10; $i++) {
  $ages[] = $i;
}
while($age = current($ages) !== false) {
  echo $age . ", ";
  next($ages);
}

https://3v4l.org/61WoL

但是,如果数组中的任何元素具有 boolean false值,这将失败。 因此,根本不建议像这样遍历数组,您应该使用适当的工具,通过使用foreach循环。 这实际上并没有移动光标,但是您可以通过为每次迭代调用next()来“使其”移动光标。

$ages = [];
for($i = 0; $i < 10; $i++) {
  $ages[] = $i;
}
foreach ($ages as $age) {
    echo current($ages).", ";
    next($ages);
}

如果您只是想打印值,最好的方法是直接从foreach循环打印,或者使用implode()

foreach ($ages as $age) {
    echo $age.", ";
}

或者

echo impolode(",", $ages);

首先,你的php代码的语法是错误的:

while($age == current($ages)) {替换第 5 行

您使用的=不是用于比较,而是用于== 尝试这样做,然后看看。

另外,你可以用更简单的方式做到这一点:

foreach($ages as $age) {
  echo "$age, ";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM