2013-11-27 52 views
-1

我知道的foreachfor循環基本的例子while循環,因爲我是在開始編碼我沒有從執行一個腳本,這是非常非常重要從那時起我一直的速度關注將每個聲明的所有轉換爲,以便循環。如果涉及到array我很困惑-_-。我知道這讓我反對投票發佈。喜歡我寧願讓人們爲自己弄清楚事情。 我只需要一點使用for循環語句的指南。如何將下面的foreach循環轉換爲for循環/ while循環語句?'for循環'和'while循環'的等效語法?

喜歡什麼我就phpbenchmark.com視爲

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

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

CODE:

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

foreach($user as $id => $name) 
{ 
    echo '<br>Id='.$id.'Name='.$name; 
} 
?> 

非常感謝。

預期輸出LIKE的foreach輸出:

Id=001Name=A 
Id=002Name=B 
Id=003Name=C 
Id=004Name=D 

也是,如果我有一個數組鍵,如

$user['AAA'] = 'A'; 
$user['BBB'] = 'B'; 
$user['CCC'] = 'C'; 
$user['DDD'] = 'D'; 

它會輸出爲:

Id=AAAName=A 
Id=AAAName=B 
Id=AAAName=C 
Id=AAAName=D 
+0

你問如何通過一個數組for循環迭代? – Huey

+1

我想你問的是如何使用帶有簡單整數$ I的'while'循環遍歷數組,當你的數組鍵具有前導零的數字.....不要微調。 –

+0

爲什麼你認爲foreach是一個性能問題?你測試過了嗎? – deceze

回答

1

forwhile環路您顯示被簡單地遞增一個數字,它可用來訪問數組的元素,如果鍵的該數組相當於這些數字。換句話說,forwhile循環與數組無關,因此您只是使用數字作爲數組的鍵。

如果你的數組鍵不是簡單的連續整數,這是更有問題的。您可以嘗試從$i變量構造正確的密鑰,但爲什麼?你應該直接迭代數組的鍵,這對於其中的foreach是完美的。您可以each或任意數量的其他複雜的方式做到這一點:

while (list($key, $value) = each($array)) { 
    ... 
} 

但我懷疑這將是比foreach顯著更快。

0

你想要這樣的東西嗎?

$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; 
} 

編輯:還與你řAAA = A等情況下

0

事情是這樣的......

<?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); 
} 
0

試試這個

$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 />'; 
} 
+0

這循環遍歷數組以提取密鑰,分配額外的內存來存儲這些密鑰,然後再次循環遍歷密鑰數組。這真的*還*更快? *真的很大的數組*還會更快嗎? – deceze

+1

對於一個想微觀優化循環的人來說,我覺得很奇怪,接受的答案在'for'標準中有'sizeof()'......顯然他們還不太瞭解微觀優化要知道這是循環的每一次迭代的開銷 –

+0

@deceze它只會爲鍵分配額外的內存,循環過程仍然會更快。貝克先生,謝謝你指出。你能詳細說明一下嗎? –