programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 02/03/05 в 21:39 |
есть 3 массива(многомерных) - в определенных пропорциях нужно раскидать их содержимое по страницам если количество страниц больше 1
$new_array
$popular_array
$normal_array
количество страниц = общее количество элементов массивов/количество элементов массивов на странице
приоритетность
на 1 странице
- все элементы $new_array
- $popular_array*0.7
- остаток $normal_array
на 2 странице
- остаток от $popular_array1*0.7
- остаток от $normal_array1
и так далее
на последней странице
- остаток $popular_array
- остаток от $normal_array
Подозреваю, что можно смешать элементы трех массивов в один в нужной пропорции а затем в одном цикле раздать по страницам с записью в файл каждой страницы
Любые намеки приветствуются. +8
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 02/03/05 в 23:06 |
я бы подсказал с удовольствием если бы ты побольше про эти скромные массивы рассказал , и зачем их три, какой тип данных там ? в каких пропорциях ,из чего исходить ?
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 02/03/05 в 23:11 |
смутно как-то..
на 1 странице
- все элементы $new_array
- $popular_array*0.7
- остаток $normal_array
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 02/03/05 в 23:30 |
mr.GOD:
$new_array - новые линки
$popular_array - популярные линки
$normal_array - обычные линки
тип данных - выборка из mysql-ной таблицы
т е каждый элемент массива - многомерный массив
пропорции
новые линки - все на первой странице (не бывает больше 10)
популярные линки - 50% от общего количества популярных линков (на последующей странице 50% от остатка с предыдущей) - но не более половины всех линков на странице
обычные линки - дополняют количество линков до стандарта (скажем 20)
вроде понятно написал...
SAV:
имеется ввиду остаток (общее количество линков любого массива минус задействованное на предыдущих страницах)
вот
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 03/03/05 в 00:06 |
Ну поехали
Значит
1)Новые линки - не больше 10 на одной странице.($new_links)
2)Популярные линки - первая старница 50 % , дальше остаток ($popular_links)
раскидываем 50 % от предыдущего.
3)Нормальные линки - $standart - ($popular_links+new_links)
4) $popular_links+new_links < $standart\2
Теперь вопрос правильно ли я все понял ? Положение линков на странице идет в стиле ?(см.ниже)
Новые линки
Популярные линки
Обчные линки.
Как ответишь напишу ...
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 03/03/05 в 00:13 |
mr.GOD писал: | Ну поехали
Значит
1)Новые линки - не больше 10 на одной странице.($new_links)
2)Популярные линки - первая старница 50 % , дальше остаток ($popular_links)
раскидываем 50 % от предыдущего.
3)Нормальные линки - $standart - ($popular_links+new_links)
4) $popular_links+new_links < $standart\2
Теперь вопрос правильно ли я все понял ? Положение линков на странице идет в стиле ?(см.ниже)
Новые линки
Популярные линки
Обчные линки.
Как ответишь напишу ... |
1)новых линков больше 10 вряд ли будет, поэтому они все на первой странице
2) да
3)да
4)$popular_links+new_links < $standart*0,7
приоритетность правильная
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 03/03/05 в 00:16 |
Цитата: | Sterx:
новые линки - все на первой странице (не бывает больше 10)
|
Цитата: | mr.GOD:
1)Новые линки - не больше 10 на одной странице.($new_links)
|
разница существенна
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 03/03/05 в 00:24 |
алгоритм вряд ли сложный.. просто неясно что на выход надо до конца..
первая страница: все новые + половина популярных (это и задает кол-во линков на пагу)
вторая следущие: половина от остатка популярных + довесок из кучи (до нужного количества)
так?
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 03/03/05 в 00:27 |
Опять вы уходите от сабжа
Цитата: | 1)новых линков больше 10 вряд ли будет, поэтому они все на первой странице |
Комрад я алгоритм пишу , меня мало волнует что там будет а что нет :-)
будет так будет а нет так нет.
Цитата: | 4)$popular_links+new_links < $standart*0,7 |
тогда уже делаем так чтобы не париться :
Код: | $popular_links+new_links < $standart*$page_percent |
Вообщем щас будем думать ...
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 03/03/05 в 01:00 |
надеюсь ты нечего не курил
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 03/03/05 в 01:14 |
прикалываешься?
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 03/03/05 в 01:24 |
Я весь топик прочитал, да так вопроса и не увидел
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 03/03/05 в 01:36 |
Dr.Syshalt:
алгоритм нужен
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 03/03/05 в 01:51 |
Sterx писал: | Dr.Syshalt:
алгоритм нужен |
хех.. начнем сначала по шагам
А - новые
Б - популярные
В - остальные
на выдаче А+Б+В элементов на Р страниц
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 03/03/05 в 01:55 |
Sterx писал: | прикалываешься? |
нет , у меня складываеться впечатление что ты пока еще сам до конца не понял что тебе нужно ...
Например это условие смысла не имеет :
Цитата: | 4) $popular_links+new_links < $standart\$some_percent |
это количество линков на паге оно не может быть дробным , следовательно нужное нам число , при таком условии(меньше) :
есть ($standart\$some_percent -1) , причем тут,то что слева я так и не понял ...
Вот наработка , писал отруки , надеюсь поймешь :
Код: |
<?php
/*На входе */
$page = 0; //Номер старницы
$standart = 20; //Общее кол-во линков на странице
$percent_popandnew_forstandart = 0.7;// Проц.соотношение к сумме новых+популярных
$next_standart = $standart*$percent_popandnew_forstandart;//Узнаем число большее standart*$percent_popandnew_forstandart
$next_standart=(int)floor($next_standart);
$updateminus=gettype($next_standart);
if($updateminus!="integer")
$next_standart--;
$normal_links = $standart-($next_standart);//Макс. норм.линк на паге
$max_newlinks = 10 ;//Макс. кол-во новых линков на паге
$pop_links = 5 ;// Максимальное кол-во популярных на паге
/* Считаем размеры сабжей */
$newl_size = sizeof($new_links);
$pop1_size = sizeof($popular_links);
$norml_size = sizeof($normal_links);
/* Собсно начинаем думать :-) */
/*Узнаем на скольких пагах будут новые линки и сколько будет на последней паге их*/
$realpages=$newl_size/$max_newlinks;
$updateplus=gettype($realpages);
$realpages=(int)floor($realpages);
if($updateplus!="integer")
$realpages++;
$lastpage_newlinks=($realpages*$max_newlinks)-$newl_size; // на последней паге
$realpages_newlinks = $realpages; // паг для новых линков всего
/*Та же ботва для остальных типов линков*/
$realpages=$norml_size/$normal_links;
$updateplus=gettype($realpages);
$realpages=(int)floor($realpages);
if($updateplus!="integer")
$realpages++;
$lastpage_normlinks=($realpages*$normal_links)-$norml_size; // на последней паге для норм.
$realpages_normlinks = $realpages; // паг для норм линков всего
/* Батва продолжаеться , можно в цикле но мне в лом писать :-) */
$realpages=$pop1_size/$pop_links;
$updateplus=gettype($realpages);
$realpages=(int)floor($realpages);
if($updateplus!="integer")
$realpages++;
$lastpage_poplinks=($realpages*$pop_links)-$pop1_size; // на последней паге для попс
$realpages_poplinks = $realpages; // паг для попс линков всего
echo "
new links pages:$realpages_newlinks<br>
new links last page :$lastpage_newlinks<br>
<br>
pop links pages : $realpages_poplinks<br>
pop links lastpage:$lastpage_poplinks<br>
<br>
normal links pages :$realpages_normlinks<br>
normal links lastpage : $lastpage_normlinks
<br>
";
?>
|
На красоту не притендует.
Все делаеться т.к. как ты хотел кроме как не считаеться количество популярных линков -50 % на каждой последующей паге , но сделать можно , просто уже поздно и мозг в отказе
Ну а попагам там сам выведешь не сложно.
|
|
|
|
С нами с 05.07.03
Сообщения: 364
Рейтинг: 68
|
Добавлено: 03/03/05 в 10:41 |
Я бы как истиный ленивец склеивал бы все массивы в один массив в нужной последовательности. А дальше все просто - делаем выборку из этого массива с извезтным смещением ($current_page*$items_per_page) с известным количеством элементов ($items_per_page).
Общее количество страниц вычисляется так:
$pages_count = ceil($total_items/$items_per_page);
где $total_items = sizeof($big_array);
где $big_array - общий массив
|
|
|
|
С нами с 24.02.05
Сообщения: 75
Рейтинг: 123
|
Добавлено: 03/03/05 в 11:49 |
что-то мне подсказывает что человека как раз интересует алгоритм склеивания в правильную последовательность, а не кол-во страниц или $big_array=array_merge($array1,$array2);
|
|
|
|
С нами с 16.02.05
Сообщения: 123
Рейтинг: 155
|
Добавлено: 03/03/05 в 12:05 |
Тут как-то стремны предполагается вывод на 1ую страницу, там может оказаться слишком много элементов.
Надо или больши информации, или менять принцип постраничной разбивки. Даже может не менять, а просто дополнить.
|
|
|
|
С нами с 24.02.05
Сообщения: 75
Рейтинг: 123
|
Добавлено: 03/03/05 в 12:18 |
да нет, imho ничего стремного,
указано что максимальное число новых ссылок всегда
меньше чем максимальное кол-во ссылок на одной странице, все новые ссылки должны быть на первой
Вот что требует уточнения, так это момент когда популярные ссылки кончатся. Это же не апория ахилл и черепаха, в конце концов :).
Т.е. когда после страницы X останутся в выводе только стандратные линки - это приемлемо или в выводе обязательно должно присутствовать N-ое кол-во популярных ссылок, убывающее в арифмтической или геометрической (указать) прогрессии?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 03/03/05 в 20:16 |
всем спасибо, сам написал
|
|
|
|
С нами с 05.07.03
Сообщения: 364
Рейтинг: 68
|
Добавлено: 03/03/05 в 20:49 |
И тебе за понижение рейтинга спасибо.
|
|
|
|
С нами с 24.02.05
Сообщения: 75
Рейтинг: 123
|
Добавлено: 03/03/05 в 20:56 |
получилось что-то вроде
<?php
$newlinks=array();
$popular=array();
$norm=array();
$per_page=20;
for($i=1;$i<=6;$i++)
{$newlinks[]="New".$i;}
for($i=1;$i<=25;$i++)
{$popular[]="Pop".$i;}
for($i=1;$i<=100;$i++)
{$norm[]="Norm".$i;}
$n2=count($newlinks);
$p1=0; $p2=count($popular);
$pop_from_arr=50/100; //max part of left popular links in array on page
$pop_on_page=50/100; //max part of popular links on page
$s1=0; $s2=count($norm);
$page_max=ceil(($n2+$p2+$s2)/$per_page);
//print("Pages:".$page_max."<br>"); //Pages
$out=array();
function add_value($arr)
{global $out;global $page;$out[$page][]=$arr;}
function add_normval($num)
{global $s1;global $norm;
for($i=0;$i<$num;$i++)
{add_value($norm[$s1]);
$s1++;}}
function add_popval($num){
global $p1; global $popular;
for($i=0;$i<$num;$i++)
{add_value($popular[$p1]);
$p1++;}}
$page=1;
$y=0; //currently links on page
foreach($newlinks as $key=>$value) {add_value($value);$y++;}
while($s1<$s2) {
if($page<>$page_max)
{
$add_pop=min($per_page-$y,min(ceil(($p2-$p1)*$pop_from_arr),floor(($per_page-$y)*$pop_on_page)));
$add_norm=min($s2-$s1,$per_page-$y-$add_pop);
} else {
$add_pop=$p2-$p1;
$add_norm=$s2-$s1; }
add_popval($add_pop);
add_normval($add_norm);
$y=0; $page++;
}
foreach($out as $key=>$value){print("<br><br><b>Page ".$key."<br></b>");
foreach($value as $key1=>$value1) {print($value1."<br>");}}
?>
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 03/03/05 в 21:06 |
косяк борды.
всем + поставил - у двоих минусы получились :/
счас +8 поставил тебе
|
|
|
|
С нами с 07.06.00
Сообщения: 3516
Рейтинг: 1802
|
Добавлено: 04/03/05 в 00:10 |
Sterx писал: | косяк борды.
всем + поставил - у двоих минусы получились :/
|
Это ИМХО не косяк борды.
Ты видимо прокрутку колесом мыши делал при активном окне оценки... оно и прокрутилось. Надо мышкой на страницу кликать после выставления оценки.
ЗЫ: Я обнулил выставленные тобой минусы. Ты ведь вроде не против?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 04/03/05 в 09:51 |
да, конечно
может и от прокрутки
|
|
|
|