Как сделать цикл в PHP быстрее - PullRequest
0 голосов
/ 21 июля 2009

Есть ли способ сделать это быстрее?

while ($item = current($data))
{
    echo '<ATTR>',$item, '</ATTR>', "\n";
    next($data);
}

Мне не нравится, что мне нужно создавать новые переменные, такие как $ item.

Ответы [ 6 ]

4 голосов
/ 21 июля 2009
<?php
$transport = array('foot', 'bike', 'car', 'plane');

foreach ($transport as $value) {
    echo $value;
}
?>
1 голос
/ 21 июля 2009

$ nl = "\ n";

while ($item = current($data))
{
    echo '<ATTR>',$item, '</ATTR>',$nl;
    next($data);
}

Сохраните символ новой строки в переменной, вместо того чтобы PHP анализировал двойные кавычки в каждой итерации.

1 голос
/ 21 июля 2009

Если все, что вы делаете, это приведенный выше код, вы можете использовать оператор взрыва.


if (count($data) > 0) {
     echo "<ATTR>".implode("</ATTR>\n<ATTR>", $data)."</ATTR>";
}
1 голос
/ 21 июля 2009

Если вы не хотите создавать временные переменные, сделайте это так:

while (current($data))
{
    echo '<ATTR>',current($data), '</ATTR>', "\n";
    next($data);
}

Однако я не знаю, действительно ли это сделает это быстрее. Единственный способ узнать это будет с помощью профилировщика, но это такая микрооптимизация, я сомневаюсь, что вы заметите разницу.

Лучший способ ускорить цикл - использовать более быстрый компьютер.

0 голосов
/ 21 июля 2009

А как насчет этого:

function my_func($str) {
    echo "<attr>{$str}</attr>\n";
}
array_map('my_func', $data);

(Должно работать, но мне любопытно, что это скорость по сравнению с foreach петлей)

Или, если вы используете PHP> = 5.3 (вероятно, не ваш случай, кстати) , вы можете использовать это, основываясь на лямбда-функции:

array_map(function ($item) {
    echo "<attr>{$item}</attr>\n";
}, $data);

Почти то же самое, но без необходимости объявлять функцию, используемую в программе только один раз.

0 голосов
/ 21 июля 2009

Вы можете сделать foreach, но тогда вы создадите 2 новые переменные. Если вам не нравится идея присваивания переменных внутри предложения while ().

foreach($data as $key => $value)
{
    echo $key . " => ".$value;
}

В любом случае вам нужно будет создать фактическую переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...