$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 написал(а):
правила, которым должен будет удовлетворять результат, перечисли.

Спустя 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
всегда казалось, что мало кода - лучше
теперь убедился, что нет
за это вам спасибо и +1
Спустя 19 минут, 48 секунд (12.07.2010 - 17:47) KaFe написал(а):
Я считаю, что мой понятнее всех для новичка. Но у linker красиво выгладит,
, и работает также по скорости как и у меня
.
я завидую
До мне наконец дотюкала фраза


я завидую

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

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

это ты так пошутил в стиле "моё лучше и ниипёт"?
а вот и коктейль "новых знаний"
$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);немного лучше, но всёравно отстаёт в среднем на 30%.... обидно
$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);

и это не смотря на то что кода якобы на 2 строки меньше и без условий(экономит пару операций в пользу array_reverse())
что скажите?
Спустя 21 минута, 23 секунды (12.07.2010 - 18:31) KaFe написал(а):
qpayct лучше используй код linker'a
.

Цитата (KaFe @ 12.07.2010 - 14:47) |
в стиле "моё лучше и ниипёт"? |
Именно

Спустя 55 минут, 53 секунды (12.07.2010 - 19:27) qpayct написал(а):
Цитата (KaFe @ 12.07.2010 - 17:31) |
qpayct лучше используй код linker'a ![]() |
$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 написал(а):



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
опять накосячил
не там бреак поставил
Basili4
опять накосячил

$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 написал(а):
А вот ишшо вариант... Сначала получаем все ключи массива в виде отдельного массива, а потом "тупо" вызываем по очереди нужные элементы и упаковываем их в новый массив. Вроде бы, нормально работает и с четным, и с нечетным количеством элементов. И пофиг
, какие индексы у массива - числовые или символьные.
PS. После отправки немного скорректировал код, т.к. отправил сначала не самый последний вариант.

$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 - а я тоже не понял
Цитата чья-то, а вопрос ко мне 
Объясняю: точку я поставил на всякий случай, дабы не заморачиваться - целочисленное будет деление или вещественный результат. Посреди ночи не хотелось мозги нагружать особо-то
Самое главное - рабочий алгоритм или как?


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

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

! | [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 - ты взял мой код и упростил его (да ещё и копирайт не указал

Я для того и вводил массив $keys в своём коде, чтобы учесть именно эту особенность ПХП.
linker - та же фигня, ты подразумеваешь, что индексы массива чисто числовые, идут подряд, начинаются с нуля (но это только частный случай!!!).
Спустя 12 минут, 38 секунд (13.07.2010 - 11:34) linker написал(а):
sergeiss, ну такое условие было
, вот вариант "ключе-независимый" 


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

Я почему говорю насчет универсальности... Потому что много раз было уже тут на форуме: человек спросил что-то, частный случай. А ему надо, на самом деле, более универсальное решение. И он опять продолжает задавать тот же вопрос, но уже "с вариациями".
Спустя 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
я не делаю замечаний, а просто интересно почему так. комментарии цитировал ибо их автор - Линкер и мне вот интересно может я чего то не понимаю или же он был прав и это относится к моему, а теперь и вашему коду?
по поводу универсальности согласен, хоть и не понимаю зачем перестраивать ассоциативный массив пирамидой? числовой для проверки кода, для парсинга и т.п. а ассоциативный разве чтобы ёлочку из стринга рисовать
linker
ceil() работает быстрее чем round()
прикольно
Wird_34
всё это уже пробовали. работает, но можно и лучше
igovet
у вас прокрутка в цикле вдважды больше....
я не делаю замечаний, а просто интересно почему так. комментарии цитировал ибо их автор - Линкер и мне вот интересно может я чего то не понимаю или же он был прав и это относится к моему, а теперь и вашему коду?
по поводу универсальности согласен, хоть и не понимаю зачем перестраивать ассоциативный массив пирамидой? числовой для проверки кода, для парсинга и т.п. а ассоциативный разве чтобы ёлочку из стринга рисовать

linker
ceil() работает быстрее чем round()

Wird_34
всё это уже пробовали. работает, но можно и лучше
igovet
у вас прокрутка в цикле вдважды больше....
Спустя 5 минут, 37 секунд (13.07.2010 - 12:30) igovet написал(а):
qpayct
Она останавливается тогда, когда нужно, это ничему не мешает.
Она останавливается тогда, когда нужно, это ничему не мешает.
Спустя 6 минут, 4 секунды (13.07.2010 - 12:36) qpayct написал(а):
igovet
ага, и всё что в цикле нужно умножить на 2, чтобы получить конечный итог выполняемых операций. мало того! ко всему ещё и классом зачем-то....
взяли мой "коктейль" и переименовали переменные да ещё и цикл увеличили вдважды. а толку?
ага, и всё что в цикле нужно умножить на 2, чтобы получить конечный итог выполняемых операций. мало того! ко всему ещё и классом зачем-то....
взяли мой "коктейль" и переименовали переменные да ещё и цикл увеличили вдважды. а толку?
Спустя 3 минуты, 22 секунды (13.07.2010 - 12:39) twin написал(а):
Нате вам.

$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;
Чем плохо писать классом?
Зачем умножать на 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
а работает то в 10 раз медленее
пример лаконичности или как там?
igovet
твой код !?
насчёт брэйка это да. торможу

пример лаконичности или как там?

igovet
твой код !?

насчёт брэйка это да. торможу
Спустя 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);
Можно еще помудрить, если так критично.

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


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);

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

Спустя 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к раз. И пропусти через вайл. Измерь время и сравни. Вайл быстрее
дык возьми самое простое действие, к примеру инкримент. И пропусти через фор 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 наносекунд быстрее. Может другие задачи порешаем?

Спустя 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 написал(а):
Вот наверно самый лаконичный и читабельный код:
хотя по скорости уступает последнему от linker
Вообще при разработке нужно учитывать все параметры. Если предполагается обработка больших массивов или их много, то стоит задуматься о скорости. А если такой, какой в примере, то выигрыш в пару десятитысячных секунды не стоит таких заморочек в ущерб прозрачности.
igovet
$c = count($array);
while($c)
$arr[] = (--$c % 2) ? array_shift($array) : array_pop($array);
хотя по скорости уступает последнему от linker

Вообще при разработке нужно учитывать все параметры. Если предполагается обработка больших массивов или их много, то стоит задуматься о скорости. А если такой, какой в примере, то выигрыш в пару десятитысячных секунды не стоит таких заморочек в ущерб прозрачности.
igovet
Цитата |
Писать классом как написал я, это удобно для визуального восприятия |
Спустя 15 секунд (13.07.2010 - 13:33) linker написал(а):
KaFe, ну не знаю, проверил у себя, ваше время:
5.79357147217E-5 сек.
против моего
1.31130218506E-5 сек.
у меня получается быстрее в 2.67 раза быстрее
5.79357147217E-5 сек.
против моего
1.31130218506E-5 сек.
у меня получается быстрее в 2.67 раза быстрее
Спустя 30 секунд (13.07.2010 - 13:34) KaFe написал(а):
igovet ......
! | [mod][/mod]sergeiss |
решать такую задачу классами, чтобы букф больше больше?
от sergeiss: тут было "неправильное" слово. Второе и последнее предупреждение автору сообщения (в данном случае за ответ, которым может быть рассмотрен как оскорбительный).
от sergeiss: тут было "неправильное" слово. Второе и последнее предупреждение автору сообщения (в данном случае за ответ, которым может быть рассмотрен как оскорбительный).
Спустя 55 секунд (13.07.2010 - 13:35) sergeiss написал(а):
Цитата (KaFe @ 13.07.2010 - 14:32) |
0.285 сек. за 10000 обращений |
А ты учел, кстати, что в моём коде 11 элементов в массиве, а у большинства - 10 элементов? То, что там ассоциативный ключ - это хорошо

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

Спустя 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: На счет предупреждения! За что??? |
Предупреждения пока устные, без занесения в трудовую книжку

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

Спустя 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 удивительное рядом, поменяйте местами код (первый будет ваш, а второй мой). 
Я поменял, выдало

Я поменял, выдало
Цитата |
уменя быстрее в 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 написал(а):
Я бы порекомендовал не гоняться за скоростью, а делать так, как понятнее и логичнее 
Вот подсчитай. Тут мелькали цифры типа 0.28 сек за 10 тыс циклов. Теперь делим и получаем 2.8е-6 сек на одну итерацию цикла. И пусть там будет даже в 10 раз дольше время, 2.8е-5 сек. Ты лично это заметишь?

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