[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: перенабор массива
qpayct
предположим у нас есть массив
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

как его перенабрать так, чтобы получилось
0, 9, 1, 8, 2, 7, 3, 6, 4, 5

свой вариант
$j = 0;
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
for($i=1; $i<count($array)+1; $i++)
{
$arr[$i] = $array[$j];
$array = array_reverse($array);
if($i%2==0) $j++;
}
print_r($arr);




Спустя 41 минута, 53 секунды (12.07.2010 - 15:30) KaFe написал(а):
правила, которым должен будет удовлетворять результат, перечисли. huh.gif

Спустя 3 минуты, 21 секунда (12.07.2010 - 15:33) tmt0086 написал(а):
KaFe
одно число первое, второе последнее и тд

Спустя 6 минут, 23 секунды (12.07.2010 - 15:40) linker написал(а):
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$len = count($array); // Лучше один раз высчитать длину массива, чем каждый раз в цикле
$max = $len - 1; // Тоже самое, фактически (сокращаем кол-во операций, выигрываем в скорости)
$result_array = array();
for($pos = 0; $pos < $len; $pos ++, $max --)
{
if ($pos > $max) { break; }
$result_array[] = $array[$pos];
if ($pos == $max) { break; }
$result_array[] = $array[$max];
}
print_r($result_array);

Спустя 22 минуты, 8 секунд (12.07.2010 - 16:02) KaFe написал(а):

$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10,11,12 );
$ar=count($array)-1;$ar;$arr=($ar/2);$v=-1;
for ($x=0;$x<$arr;$x++)
{
$v++;
$g[$v]=$array[$x];
$v++;
$g[$v]=$array[$ar-$x];
}
if ($ar%2==0) {$v++;$g[$v]=$array[$arr];}
print_r($g);

Спустя 1 час, 25 минут, 47 секунд (12.07.2010 - 17:27) qpayct написал(а):
мда.....

всегда казалось, что мало кода - лучше
теперь убедился, что нет

за это вам спасибо и +1

Спустя 19 минут, 48 секунд (12.07.2010 - 17:47) KaFe написал(а):
Я считаю, что мой понятнее всех для новичка. Но у linker красиво выгладит,sad.gif , и работает также по скорости как и у меня mad.gif .

я завидую dry.gif

До мне наконец дотюкала фраза
Цитата (qpayct @ 12.07.2010 - 14:27)
всегда казалось, что мало кода - лучше
теперь убедился, что нет

после того когда запустил тест на производительность wink.gif

Спустя 22 минуты, 35 секунд (12.07.2010 - 18:10) qpayct написал(а):
Цитата (KaFe @ 12.07.2010 - 16:47)
Я считаю, что мой понятнее всех для новичка
blink.gif
это ты так пошутил в стиле "моё лучше и ниипёт"?

а вот и коктейль "новых знаний"
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$carr = count($array);
$j = $carr - 1;
for($i=0; $i<$carr; $i++, $j --)
{
$array = array_reverse($array);
$arr[$i] = $array[$j];
unset($array[$j]);
}
print_r($arr);
немного лучше, но всёравно отстаёт в среднем на 30%.... обидно sad.gif
и это не смотря на то что кода якобы на 2 строки меньше и без условий(экономит пару операций в пользу array_reverse())

что скажите?

Спустя 21 минута, 23 секунды (12.07.2010 - 18:31) KaFe написал(а):
qpayct лучше используй код linker'a wink.gif .
Цитата (KaFe @ 12.07.2010 - 14:47)
в стиле "моё лучше и ниипёт"?

Именно wink.gif

Спустя 55 минут, 53 секунды (12.07.2010 - 19:27) qpayct написал(а):
Цитата (KaFe @ 12.07.2010 - 17:31)
qpayct лучше используй код linker'a  wink.gif
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$c = count($array);
$j = $c - 1;
$c = $c / 2;
$arr = array();
for($i=0; $i<$c; $i++,$j-- )
{
if($i == $j) break;
$arr[] = $array[$i];
$arr[] = $array[$j];
}
print_r($arr);
победила дружба!

Спустя 2 часа, 8 минут, 2 секунды (12.07.2010 - 21:35) linker написал(а):
smile.gifsmile.gifsmile.gif
qpayct
Ну во-первых, array_reverse() жутко тормозит, а делается это при каждой итерации цикла. Во-вторых, unset в массиве, по которому идет цикл, не всегда кузяво.
Мой код, тоже не блещет идеалом, два брейка в цикле режут глаза таки.

p.s., кстати последний вариант не работает в случае если количество элементов в массиве нечетное количество.

Спустя 58 минут, 10 секунд (12.07.2010 - 22:33) Basili4 написал(а):
может уже позно и я чего то не понимаю но помоему проще всего так

<?php
$arr=array(1,2,3,4,5,6,7,8,9,0);
$max=count ($arr);
$len =$max/2;
echo $max;
$itog=array();
for ($i=0;$i<$len;$i++)
{
$itog[]=$arr[$i];
$itog[]=$arr[$max-$i-1];
}
print_r($itog);
?>

Спустя 1 час, 30 минут, 27 секунд (13.07.2010 - 00:04) qpayct написал(а):
linker
опять накосячил smile.gif не там бреак поставил
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$c = count($array);
$j = $c - 1;
$c = $c / 2;
$arr = array();
for($i=0; $i<$c; $i++,$j-- )
{
$arr[] = $array[$i];
if($i == $j) break;
$arr[] = $array[$j];
}
print_r($arr);

Basili4
Цитата (linker @ 12.07.2010 - 20:35)
не работает в случае если количество элементов в массиве нечетное количество.
как быть с этим?


кстати полюбому можно ещё лучше. достаточно ведь просто переставить местами ключи массива

Спустя 23 минуты, 8 секунд (13.07.2010 - 00:27) sergeiss написал(а):
А вот ишшо вариант... Сначала получаем все ключи массива в виде отдельного массива, а потом "тупо" вызываем по очереди нужные элементы и упаковываем их в новый массив. Вроде бы, нормально работает и с четным, и с нечетным количеством элементов. И пофиг smile.gif, какие индексы у массива - числовые или символьные.

$array = array(0, 1, 2, 3, 4, 5, 6, 'new'=>7, 8, 9, 10);

$keys=array_keys( $array );

$c=count( $array );

$new_arr=array();
for( $i=0; $i<($c/2.); $i++)
{
$new_arr[ $i*2 ] =$array[ $keys[$i] ];

if( $i < $c-$i-1 )
$new_arr[ $i*2+1 ]=$array[ $keys[$c-$i-1] ];
}

echo '<pre>'; var_dump( $new_arr ); echo '</pre>';



PS. После отправки немного скорректировал код, т.к. отправил сначала не самый последний вариант.

Спустя 22 минуты, 13 секунд (13.07.2010 - 00:49) qpayct написал(а):
sergeiss
Цитата
$len = count($array); // Лучше один раз высчитать длину массива, чем каждый раз в цикле
$max = $len - 1; // Тоже самое, фактически (сокращаем кол-во операций, выигрываем в скорости)
и зачем вот тут точка интересно? ($c/2.)

Спустя 8 часов, 12 минут, 34 секунды (13.07.2010 - 09:02) sergeiss написал(а):
qpayct - а я тоже не понял smile.gif Цитата чья-то, а вопрос ко мне smile.gif

Объясняю: точку я поставил на всякий случай, дабы не заморачиваться - целочисленное будет деление или вещественный результат. Посреди ночи не хотелось мозги нагружать особо-то wink.gif
Самое главное - рабочий алгоритм или как?

Спустя 1 час, 20 минут, 35 секунд (13.07.2010 - 10:22) KaFe написал(а):
Цитата (sergeiss @ 13.07.2010 - 06:02)
Самое главное - рабочий алгоритм или как?

самое главное чтобы было все в шоколаде wink.gif


 ! 
[mod][/mod]sergeiss
Предупреждение за флуд в тематическом разделе.

Спустя 32 минуты, 55 секунд (13.07.2010 - 10:55) Wird_34 написал(а):
Еще немного откорректировал код linker'а:
$array = array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
$array_size = count( $array );
$j = $array_size - 1;
$result_array = array();

for ( $i = 0; $i < $j; $i++, $j-- ) {
$result_array[] = $array[$i];
$result_array[] = $array[$j];
}
if ( $array_size % 2 ) {
$result_array[] = $array[$j];
}

print_r($result_array);


И свой написал:
$array = array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
$array_size = count( $array );
$i = 0;
$j = $array_size - 1;
$result_array = array();

for ( $k = 0; $k < $array_size; $k++ ) {
if ( $k % 2 == 0 ) {
$result_array[] = $array[$i];
$i++;
} else {
$result_array[] = $array[$j];
$j--;
}
}


print_r($result_array);

Спустя 1 минута, 33 секунды (13.07.2010 - 10:57) tomash написал(а):
$array1 =  array(0, 1, 2, 3, 4, 5, 6, 7, 8,9);
$cnt = count($array1);
for ($i = 0; $i < $cnt/2; $i++)
{
$array2[] = $array1[$i];
$array2[] = $array1[$cnt - $i - 1];
}
if ($cnt%2) array_pop($array2);

Спустя 23 минуты, 27 секунд (13.07.2010 - 11:20) Basili4 написал(а):
tomash
был такой вариант я писал недостаток не льзя использовать с массмвами с нечетным количество элементов как вариант доюовлять моссив до четности и и если был добавлен в конце сносить левые значения

Спустя 1 минута, 2 секунды (13.07.2010 - 11:21) linker написал(а):
Еще более быстрый вариант от меня
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$len = ceil(count($array)/2);
$max = count($array) - 1;
$result_array = array();
for($pos = 0; $pos < $len; $pos ++, $max --)
{
$result_array[] = $array[$pos];
if ($pos <> $max) $result_array[] = $array[$max];
}


Спустя 19 секунд (13.07.2010 - 11:22) sergeiss написал(а):
Цитата (tomash @ 13.07.2010 - 11:57)
$array1 =array(0, 1, 2, 3, 4, 5, 6, 7, 8,9);
$cnt = count($array1);
for ($i = 0; $i < $cnt/2; $i++)
{
$array2[] = $array1[$i];
$array2[] = $array1[$cnt - $i - 1];
}
if ($cnt%2) array_pop($array2);


tomash - ты взял мой код и упростил его (да ещё и копирайт не указал smile.gif). При этом ты его сделал НЕУНИВЕРСАЛЬНЫМ (!). Потому что в твоём коде подразумевается (как во многих других языках и есть), что индексы массива цифровые и идут подряд, без пропусков. Но в ПХП это не так. Поэтому "твой" код очень ограничен.
Я для того и вводил массив $keys в своём коде, чтобы учесть именно эту особенность ПХП.

linker - та же фигня, ты подразумеваешь, что индексы массива чисто числовые, идут подряд, начинаются с нуля (но это только частный случай!!!).

Спустя 12 минут, 38 секунд (13.07.2010 - 11:34) linker написал(а):
sergeiss, ну такое условие было smile.gif, вот вариант "ключе-независимый" smile.gif
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
$len = ceil(count($array)/2);
$max = count($array) - 1;
$keys = array_keys($array);
$result_array = array();
for($pos = 0; $pos < $len; $pos ++, $max --)
{
$result_array[] = $array[$keys[$pos]];
if ($pos <> $max) $result_array[] = $array[$keys[$max]];
}


Спустя 8 минут, 57 секунд (13.07.2010 - 11:43) sergeiss написал(а):
linker - да, это лучше намного смотрится. Хотя, в конце ключик 'link_error' был бы более в тему wink.gif

Я почему говорю насчет универсальности... Потому что много раз было уже тут на форуме: человек спросил что-то, частный случай. А ему надо, на самом деле, более универсальное решение. И он опять продолжает задавать тот же вопрос, но уже "с вариациями".

Спустя 36 минут, 27 секунд (13.07.2010 - 12:20) igovet написал(а):

$array->arr_tmp = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$array->count = count($array->arr_tmp) - 1;
for($i=0, $j=$array->count; $i<$array->count; $i++, $j--)
{
if($array->arr_tmp[$i] >= $array->arr_tmp[$j]) break;

$array->arr[$i] = $array->arr_tmp[$i];
$array->arr[$j] = $array->arr_tmp[$j];
}
var_dump($array->arr);

Спустя 4 минуты, 19 секунд (13.07.2010 - 12:24) qpayct написал(а):
sergeiss
я не делаю замечаний, а просто интересно почему так. комментарии цитировал ибо их автор - Линкер и мне вот интересно может я чего то не понимаю или же он был прав и это относится к моему, а теперь и вашему коду?
по поводу универсальности согласен, хоть и не понимаю зачем перестраивать ассоциативный массив пирамидой? числовой для проверки кода, для парсинга и т.п. а ассоциативный разве чтобы ёлочку из стринга рисовать smile.gif

linker
ceil() работает быстрее чем round() smile.gif прикольно

Wird_34
всё это уже пробовали. работает, но можно и лучше

igovet
у вас прокрутка в цикле вдважды больше....

Спустя 5 минут, 37 секунд (13.07.2010 - 12:30) igovet написал(а):
qpayct
Она останавливается тогда, когда нужно, это ничему не мешает.

Спустя 6 минут, 4 секунды (13.07.2010 - 12:36) qpayct написал(а):
igovet
ага, и всё что в цикле нужно умножить на 2, чтобы получить конечный итог выполняемых операций. мало того! ко всему ещё и классом зачем-то....
взяли мой "коктейль" и переименовали переменные да ещё и цикл увеличили вдважды. а толку?

Спустя 3 минуты, 22 секунды (13.07.2010 - 12:39) twin написал(а):
Нате вам. smile.gif
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
$i = 0;
while(count($array))
$arr[] = !(++$i%2)?array_pop($array):array_shift($array);

print_r($arr);

Спустя 7 минут, 24 секунды (13.07.2010 - 12:46) igovet написал(а):
qpayct
Зачем умножать на 2, ты код мой хоть понимаешь? Какая разница какое значение в цикле, пусть хоть 1 000 000, он выполниться с той же скоростью что и с цифрой 4, а знаешь почему? Потому что на цифре 4, мой цикл закончит работу.
if($array->arr_tmp[$i] >= $array->arr_tmp[$j]) break;
Чем плохо писать классом?

Спустя 3 минуты, 18 секунд (13.07.2010 - 12:50) qpayct написал(а):
twin
ohmy.gif а работает то в 10 раз медленее
пример лаконичности или как там? laugh.gif

igovet
твой код !? rolleyes.gif
насчёт брэйка это да. торможу

Спустя 58 секунд (13.07.2010 - 12:51) KaFe написал(а):
twin глупости какие 0,399 секунд за 10000 оборотов, когда у linker 0.220

Спустя 1 минута, 50 секунд (13.07.2010 - 12:52) sergeiss написал(а):
Кстати, насчет скорости. "Мой" код как? Я его не сравнивал с другими, а автор темы, наверное, сравнил?

Спустя 3 минуты, 19 секунд (13.07.2010 - 12:56) twin написал(а):
Ну я не мерял. Просто при решении задачи привык оперировать очевидными вещами. Впрочем, скорость тут падает из за цикла. Вот так к примеру будет быстрее:
$c = count($array);

for($i = 0; $i < $c; ++$i)
$arr[] = !($i%2)?array_pop($array):array_shift($array);

Можно еще помудрить, если так критично. smile.gif

Спустя 1 минута, 57 секунд (13.07.2010 - 12:58) qpayct написал(а):
sergeiss
а как же? smile.gif но сравнивать не буду wink.gif у вас совсем по другим условиям код(ассоциативные массивы) а это конечно тормозит процесс

twin
$array=array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$c = count($array);
for($i = $c; $i > 0; --$i)
$arr[] = !($i%2) ? array_pop($array) : array_shift($array);
print_r($arr);
вот так будет ваще прикольно smile.gif

Спустя 3 минуты, 25 секунд (13.07.2010 - 13:01) DedMorozzz написал(а):
к слову о птичках - вайл быстрее фора smile.gif

Спустя 1 минута, 41 секунда (13.07.2010 - 13:03) qpayct написал(а):
DedMorozzz
мои замерки в данном коде гооврят против вас....

Спустя 1 минута, 2 секунды (13.07.2010 - 13:04) Basili4 написал(а):
twin
Я думаю что несовсем удачный вариант пробегать весь массив

может

лучше так
$c=count($array) ;
$f=$c%2;
$c=($c /2)-$f;

for($i = 0; $i < $c; ++$i)
{
$arr[] = array_pop($array);
$arr[] =array_shift($array);
}

if ($f==1) $arr[] = array_pop($array);


Спустя 1 минута, 25 секунд (13.07.2010 - 13:05) linker написал(а):
Цитата
Чем плохо писать классом?

Тем, что оно тут не нужно в принципе. Да и реализация объектами неправильная, необходимость класса когда пишешь только:
print_r($Array->reSet());


Спустя 1 минута, 6 секунд (13.07.2010 - 13:06) DedMorozzz написал(а):
qpayct
дык возьми самое простое действие, к примеру инкримент. И пропусти через фор 10к раз. И пропусти через вайл. Измерь время и сравни. Вайл быстрее

Спустя 4 минуты, 9 секунд (13.07.2010 - 13:11) qpayct написал(а):
Цитата (qpayct @ 13.07.2010 - 12:03)
DedMorozzz
мои замерки в данном коде гооврят против вас....

я и не спорю, а уточняю

Спустя 2 минуты, 3 секунды (13.07.2010 - 13:13) linker написал(а):
DedMorozzz, в данном случае while или for не имеет значения, производительность гробят цикличные вызовы функций array_pop() и array_shift()

Спустя 4 минуты, 5 секунд (13.07.2010 - 13:17) linker написал(а):
Вот еще пример, работает вдвое быстрее моего предыдущего
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);
$result_array = array();
$len = ceil(count($array)/2);
$max = count($array) - 1;
$keys = array_keys($array);
$pos = 0;
while($pos < $len)
{
$result_array[] = $array[$keys[$pos]];
if ($pos <> $max) $result_array[] = $array[$keys[$max]];
$pos ++;
$max --;
}

Спустя 5 минут, 36 секунд (13.07.2010 - 13:22) KaFe написал(а):
По вникал в суть дела, и вот так свой переделал
$array = array( 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10,11,12,'a'=>50);
$array=array_values ($array);
$ar=count($array)-1;$ar;$arr=($ar/2);
for ($x=0;$x<$arr;$x++)
{
$g[]=$array[$x];
$g[]=$array[$ar-$x];
}
if ($ar%2==0) $g[]=$array[$arr];
}

Спустя 2 минуты, 1 секунда (13.07.2010 - 13:24) Wird_34 написал(а):
А разве программист не должен стремиться к балансу между понятностью кода и его эффективностью. Одно дело предлагать разные варианты решения, но другое переписывать его в более непонятный, но при этом работающий на 5 наносекунд быстрее. Может другие задачи порешаем? smile.gif

Спустя 4 минуты, 47 секунд (13.07.2010 - 13:29) KaFe написал(а):
linker ваш последний код имеет показатели 0.240 сек., мой последний код 0.205 сек. за 10000 обращений:lol:

Спустя 28 секунд (13.07.2010 - 13:30) igovet написал(а):
linker
Писать классом как написал я, это удобно для визуального восприятия, так как в большом коде когда пишешь, есть основной объект, а в нём уже хранится всё что тебе нужно, нет путаницы в переменных.
Необходимость класса бывает очень разной, узко мыслим.

Спустя 2 минуты, 1 секунда (13.07.2010 - 13:32) KaFe написал(а):
Цитата (sergeiss @ 13.07.2010 - 09:52)
Кстати, насчет скорости. "Мой" код как? Я его не сравнивал с другими, а автор темы, наверное, сравнил?

0.285 сек. за 10000 обращений

Спустя 1 минута, 30 секунд (13.07.2010 - 13:33) twin написал(а):
Вот наверно самый лаконичный и читабельный код:
$c = count($array); 

while($c)
$arr[] = (--$c % 2) ? array_shift($array) : array_pop($array);

хотя по скорости уступает последнему от linker smile.gif

Вообще при разработке нужно учитывать все параметры. Если предполагается обработка больших массивов или их много, то стоит задуматься о скорости. А если такой, какой в примере, то выигрыш в пару десятитысячных секунды не стоит таких заморочек в ущерб прозрачности.

igovet
Цитата
Писать классом как написал я, это удобно для визуального восприятия

дану...
Посмотри тут. smile.gif Это старые войны.

Спустя 15 секунд (13.07.2010 - 13:33) linker написал(а):
KaFe, ну не знаю, проверил у себя, ваше время:
5.79357147217E-5 сек.
против моего
1.31130218506E-5 сек.
у меня получается быстрее в 2.67 раза быстрее

Спустя 30 секунд (13.07.2010 - 13:34) KaFe написал(а):
igovet ......

 ! 
[mod][/mod]sergeiss
решать такую задачу классами, чтобы букф больше больше?

от sergeiss: тут было "неправильное" слово. Второе и последнее предупреждение автору сообщения (в данном случае за ответ, которым может быть рассмотрен как оскорбительный).

Спустя 55 секунд (13.07.2010 - 13:35) sergeiss написал(а):
Цитата (KaFe @ 13.07.2010 - 14:32)
0.285 сек. за 10000 обращений

А ты учел, кстати, что в моём коде 11 элементов в массиве, а у большинства - 10 элементов? То, что там ассоциативный ключ - это хорошо smile.gif А вот количество элементов лучше, чтоб одинаковое было.

Спустя 44 секунды (13.07.2010 - 13:35) KaFe написал(а):
linker входные данные одинаковые??? sergeiss да я учитывал данный факт.Результаты проверял на три раза, могу сказать одно.

While в два раза требовательнее for

P.S: На счет предупреждения! За что??? blink.gif

Спустя 4 минуты (13.07.2010 - 13:39) linker написал(а):
KaFe, абсолютно одинаковые и там и там
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 'sss' => 9);


Спустя 4 минуты, 35 секунд (13.07.2010 - 13:44) KaFe написал(а):
Я все еще раз перепроверил, у меня цифры правильные, покажите как вы проверяете

Спустя 8 минут, 26 секунд (13.07.2010 - 13:52) sergeiss написал(а):
Цитата (KaFe @ 13.07.2010 - 14:35)
P.S: На счет предупреждения! За что???

Предупреждения пока устные, без занесения в трудовую книжку smile.gif Но оба они нарушают Правила форума http://phpforum.ru/index.php?act=boardrules (ссылка вверху страницы есть):

1. За флуд (в начале этой темы).
2. За высказывание, которое может быть расценено как оскорбительное другим участником форума.

А бан на данном этапе ты не получил только потому, что другие твои высказывания в теме были по делу. Потому пока только предупреждения.

И третье нарушение, кстати smile.gif Публичное обсуждение действий модератора....

Спустя 1 минута, 58 секунд (13.07.2010 - 13:54) linker написал(а):
KaFe, да банально проверяю
$start = microtime(1);
...
// Ваш код
$subtime1 = microtime(1) - $start;
$start = microtime(1);
...
// Мой код
$subtime2 = microtime(1) - $start;
if ($subtime1 > $subtime2)
{
echo "У меня быстрее в " . ($subtime1/$subtime2) . " раза";
}


Спустя 16 минут, 44 секунды (13.07.2010 - 14:11) KaFe написал(а):
KaFe удивительное рядом, поменяйте местами код (первый будет ваш, а второй мой). mellow.gif

Я поменял, выдало
Цитата
уменя быстрее в 2.53947368421 раза

Кстати мой метод
$t = explode(" ",microtime());$start_t=$t[1]+$t[0];
//Здесь тестируем код, при том каждый код тестируется по отдельности, дабы ...
$t = explode(" ",microtime());$end_t=$t[1]+$t[0];
echo ($end_t-$start_t);

Спустя 22 минуты, 19 секунд (13.07.2010 - 14:33) qpayct написал(а):
дык ясный пень вариант линкера самый, что ненаесть оптимальный . Убираем асс.массивы и вообще просто чудо оптимизации. Ладно, думаю тема исчерпала себя.

З.Ы. Удивлюсь, если в конкурсе Твина в номинации 'самый оптимальный код' победит не Линкер

Спустя 22 часа, 35 минут (14.07.2010 - 13:08) qpayct написал(а):
ещё одно важное разоблачение пхп5.

(за пример возьму код Линкера т.к. он самый шустрый)

$array = array(0,1,2,3,4,5,6,7,8,9);
$arr = array();
$max = count($array) - 1;
$len = $max/2;
$pos = 0;
//$keys = array_keys($array);
while($pos < $len)
{
$arr[] = $array[$pos];
if ($pos == $max) break;
$arr[] = $array[$max];
$pos ++;
$max --;
}
$arr[3] = 'ok';
print_r($array);
выведет
Цитата
Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 9
    [10] => 10
)
так что несмотря на то что это пхп 5.3.1 всёодно надо прописывать

$array = array(0,1,2,3,4,5,6,7,8,9);
$arr = array();
$max = count($array) - 1;
$len = $max/2;
$pos = 0;
//$keys = array_keys($array);
while($pos < $len)
{
$arr[] = &$array[$pos];
if ($pos == $max) break;
$arr[] = &$array[$max];
$pos ++;
$max --;
}
$arr[3] = 'ok';
print_r($array);
вот такие дела

Спустя 1 час, 23 минуты, 10 секунд (14.07.2010 - 14:32) qpayct написал(а):
самый быстрый(пока) вариант
$array = array(0,1,2,3,4,5,6,7,8,9);
$pos = 0;
$max = count($arr) - 1;
$len = $max / 2;
$arr = array();
while($pos < $len)
{
$arr[] = &$array[$pos];
if ($pos == $max) break;
$arr[] = &$array[$max];
$pos++;
$max--;
}

Спустя 14 минут, 13 секунд (14.07.2010 - 14:46) sergeiss написал(а):
Я бы порекомендовал не гоняться за скоростью, а делать так, как понятнее и логичнее smile.gif
Вот подсчитай. Тут мелькали цифры типа 0.28 сек за 10 тыс циклов. Теперь делим и получаем 2.8е-6 сек на одну итерацию цикла. И пусть там будет даже в 10 раз дольше время, 2.8е-5 сек. Ты лично это заметишь?

Спустя 3 минуты, 54 секунды (14.07.2010 - 14:50) qpayct написал(а):
sergeiss
нет конечно smile.gif , но дело в другом я учусь изначально правильно строить. вот еслиб я не задался этим вопрсом разве узнал бы о таких тонкостях пхп5?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.