Php '的等效语法;对于循环'&';while循环';?

Php '的等效语法;对于循环'&';while循环';?,php,arrays,loops,foreach,Php,Arrays,Loops,Foreach,我知道foreach to for循环和while循环的基本示例,自从我开始编码以来,我没有注意脚本的执行速度,这是非常重要的自那时起,我一直将所有for-each语句转换为for循环。如果涉及到数组我很困惑-。我知道这会让我失望。像我更愿意让人们自己解决问题。 我只需要一些使用for循环语句的指南。如何将以下foreach循环转换为for循环/while循环语句 就像我在phpbenchmark.com上看到的 $i=0;而($i“C”); while(列表($id,$name)=每个($us

我知道foreach to for循环和while循环的基本示例,自从我开始编码以来,我没有注意脚本的执行速度,这是非常重要的自那时起,我一直将所有for-each语句转换为for循环。如果涉及到
数组
我很困惑-。我知道这会让我失望。像我更愿意让人们自己解决问题。 我只需要一些使用for循环语句的指南。如何将以下foreach循环转换为for循环/while循环语句

就像我在phpbenchmark.com上看到的

$i=0;而($i<1000000)+$i

对于($i=0;$i<1000000;++$i)

代码:

如果我有一个数组,比如

它将输出为:


你想要这样的东西吗

$length = count($user);
for ($i = 0; $i < $length; $i++) {
   print $user[$i];
}
$user = array ( '001' => 'A',
              '002' => 'B',
              '033' => 'C' );
while( list ( $id, $name) = each ( $user) )
{
   echo '<br>Id=' .$id. 'Name='.$name;
} 
$length=count($user);
对于($i=0;$i<$length;$i++){
打印$user[$i];
}
编辑:还是类似的

$length = count($user);
for ($i = 0; $i < $length; $i++) {
   print $user[$i];
}
$user = array ( '001' => 'A',
              '002' => 'B',
              '033' => 'C' );
while( list ( $id, $name) = each ( $user) )
{
   echo '<br>Id=' .$id. 'Name='.$name;
} 
$user=array('001'=>'A',
“002”=>“B”,
“033”=>“C”);
while(列表($id,$name)=每个($user))
{
回显“
Id=”.$Id.“Name=”.$Name; }

编辑:也适用于r AAA=etc案例

当和循环时,显示的循环只是增加一个数字,如果数组的键与这些数字相等,则可以使用该循环访问数组的元素。换句话说,
for
虽然
循环本身与数组无关,但您只是使用一个数字作为数组的键

如果数组键不是简单的连续整数,则问题更大。您可以尝试从
$i
变量构造正确的键,但为什么?您只需显式地迭代数组的键,
foreach
就是最好的选择。您也可以使用或任何其他复杂的方法来完成:

while (list($key, $value) = each($array)) {
   ...
}
但我怀疑它会比像这样的东西快很多

<?php
$user['001'] = 'A';
$user['002'] = 'B';
$user['003'] = 'C';
$user['004'] = 'D';

while (current($user)) {

        echo '<br>Id='.key($user).'Name='.$user[key($user)];
        next($user);
}
试试这个

$user['001'] = 'A';
$user['002'] = 'B';
$user['003'] = 'C';
$user['004'] = 'D';
$keys = array_keys($user);
$length = sizeof($user);
for($i=0; $i<$length; $i++) {
    echo 'id: '.$keys[$i].' value: '.$user[$keys[$i]].'<br />';
}
$user['001']='A';
$user['002']='B';
$user['003']='C';
$user['004']='D';
$keys=数组_键($user);
$length=sizeof($user);

对于($i=0;$i您是在问如何使用for循环遍历数组吗?我想您是在问如何使用
循环遍历数组,而当您的数组键具有前导零的数字时,
使用简单整数$i进行循环…..不要进行微优化。为什么您认为
foreach
是一个性能问题?您没有吗ested?@deceze是的,我测试它的速度比foreach循环快了200微秒使用合适的循环来完成你的工作:这就是为什么PHP提供了这些选项——否则你只是在教自己编写代码,使代码更难阅读,随后更难维护。通过数组循环一次,提取密钥,分配额外的数据在内存中存储这些键,然后在键数组中再次循环。这真的更快吗?使用真正大的数组会更快吗?对于一个想对循环进行微优化的人来说,我觉得奇怪的是,接受的答案有
sizeof()
标准的
中的
。显然,他们对微观优化的了解还不够,不知道这是每个迭代过程中的开销loop@deceze它只会为键分配额外的内存,循环过程会更快。贝克先生,谢谢你指出。你能详细说明一下你的想法吗?是的,没错。循环过程会更快我想说的是,循环中可能节省的时间可能会被调用
array_keys
抵消。Mark说每次迭代都调用
sizeof($user)
,这也需要时间。您只需调用一次:
for($I=0,$size=sizeof($user);$I<$size;$I++)…
这是一种开销,因为每次迭代都需要额外的函数调用(调用sizeof()函数)来检索一个不会从一次迭代到下一次迭代的值;这就是为什么在循环之前一次性调用以将值存储在变量中更好的原因
<?php
$user['001'] = 'A';
$user['002'] = 'B';
$user['003'] = 'C';
$user['004'] = 'D';

while (current($user)) {

        echo '<br>Id='.key($user).'Name='.$user[key($user)];
        next($user);
}
$user['001'] = 'A';
$user['002'] = 'B';
$user['003'] = 'C';
$user['004'] = 'D';
$keys = array_keys($user);
$length = sizeof($user);
for($i=0; $i<$length; $i++) {
    echo 'id: '.$keys[$i].' value: '.$user[$keys[$i]].'<br />';
}