2013-11-27 4 views
-1

Я знаю, что основные примеры о Еогеаспе к для цикла и в то время как петля, так как я был начать кодирование я не обращая внимание от скорости выполнения сценария которого он является очень и очень важно с тех пор я продолжаю конвертируя все мои для каждого заявление на для цикла. Если дело доходит до array, я очень смущен -_-. Я знаю, что это дает мне возможность проголосовать за это. LIKE Я бы предпочел, чтобы люди определяли вещи для себя. Мне просто нужно немного руководство, используя оператор for loop. Как преобразовать следующий цикл foreach в for loop/while loop statement?эквивалентный синтаксис для 'for loop' & 'while loop'?

как то, что я видел на phpbenchmark.com, как

$ я = 0; while ($ i < 1000000) ++ $ i;

для ($ i = 0; $ i < 1000000; ++ $ i);

КОД:

<?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 Еогеасп:

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

вы спрашиваете, как перебрать массив с для цикла? – Huey

+1

Я думаю, вы спрашиваете, как итерации по массиву, используя цикл while, с простым целым числом $ I, когда ваши ключи массива имеют числа с ведущими нулями ..... НЕ МИКРО-ОПТИМИЗИРОВАТЬ. –

+0

Почему вы думаете, что «foreach» - это проблема производительности? Вы протестировали его? – deceze

ответ

1

В for и while петле вы показываете просто увеличивающееся число, которое вы можете использовать для доступа к элементам массива, если ключи от этот массив эквивалентен этим числам. Другими словами, петли for или while не имеют ничего общего с массивами как таковыми, вы просто используете число как ключ к массиву.

Если ваши ключи массива не являются простыми непрерывными целыми числами, это более проблематично. Вы можете попытаться построить правильные ключи из своей переменной $i, но почему? Вы должны просто прокручивать явным образом ключи от массива, для которых foreach совершенен.Вы можете также сделать это с each или любое количество других сложных способов:

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

Но я сомневаюсь, что это будет значительно быстрее, чем foreach.

0

Вы хотели что-то вроде этого?

$length = count($user); 
for ($i = 0; $i < $length; $i++) { 
    print $user[$i]; 
} 

EDIT: или что-то в этом роде?

$user = array ('001' => 'A', 
       '002' => 'B', 
       '033' => 'C'); 
while(list ($id, $name) = each ($user)) 
{ 
    echo '<br>Id=' .$id. 'Name='.$name; 
} 

EDIT: также работает с вами г 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

Для парня, который хочет микро-оптимизировать свои петли, мне кажется странным, что принятый ответ имеет 'sizeof()' в критериях 'for' ... ясно, что они еще недостаточно знают о микро-оптимизации чтобы знать, что это накладные расходы на каждой итерации цикла –

+0

@deceze, он просто выделит дополнительную память для ключей, процесс цикла все равно будет быстрее. Мистер Бейкер, спасибо за указание. Не могли бы вы рассказать об этом? –