[英]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);
}
但是,如果数组中的任何元素具有 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.