Закръгляне и странициране

Hous

Registered
Sтраницирането го правя на принципа
общ брой резултати делено на желания брой резултати на страница и получавам броя страници,но

47/12=3.9166666
като реално аз имам 4 страници
12
12
12
11
и в този случай нормалното закръглане си върши работата 3,9=>4
но ако е
41/12 = 3,416666666
и реално аз имам 4 страници
12
12
12
5
а в този случай нормалното закръглане би закръглило 3,41 => 3
според което аз виждам само 3 страници...и губя последните 5 резултата,как процедирам в този случай?
edit:Трябва ми функция която да прави проверка дали да закръгли към по-голямото или към по-малкото според изчисленията по-горе.
Дано сега ме разберете.
:) :?: :idea:
 
PHP:
<?php
class pagination
{
	public function __construct()
	{
	}
	public function calculate_pages($total_rows, $rows_per_page, $page_num)
	{
		$arr = array();
		// calculate last page
		$last_page = ceil($total_rows / $rows_per_page);
		// make sure we are within limits
		$page_num = (int) $page_num;
		if ($page_num < 1)
		{
		   $page_num = 1;
		} 
		elseif ($page_num > $last_page)
		{
		   $page_num = $last_page;
		}
		$upto = ($page_num - 1) * $rows_per_page;
		$arr['limit'] = 'LIMIT '.$upto.',' .$rows_per_page;
		$arr['current'] = $page_num;
		if ($page_num == 1)
			$arr['previous'] = $page_num;
		else
			$arr['previous'] = $page_num - 1;
		if ($page_num == $last_page)
			$arr['next'] = $last_page;
		else
		$arr['next'] = $page_num + 1;
		$arr['last'] = $last_page;
		$arr['info'] = 'Page ('.$page_num.' of '.$last_page.')';
		$arr['pages'] = $this->get_surrounding_pages($page_num, $last_page, $arr['next']);
		return $arr;
	}
	function get_surrounding_pages($page_num, $last_page, $next)
	{
		$arr = array();
		$show = 5; // how many boxes
		// at first
		if ($page_num == 1)
		{
			// case of 1 page only
			if ($next == $page_num) return array(1);
			for ($i = 0; $i < $show; $i++)
			{
				if ($i == $last_page) break;
				array_push($arr, $i + 1);
			}
			return $arr;
		}
		// at last
		if ($page_num == $last_page)
		{
			$start = $last_page - $show;
			if ($start < 1) $start = 0;
			for ($i = $start; $i < $last_page; $i++)
			{
				array_push($arr, $i + 1);
			}
			return $arr;
		}
		// at middle
		$start = $page_num - $show;
		if ($start < 1) $start = 0;
		for ($i = $start; $i < $page_num; $i++)
		{
			array_push($arr, $i + 1);
		}
		for ($i = ($page_num + 1); $i < ($page_num + $show); $i++)
		{
			if ($i == ($last_page + 1)) break;
			array_push($arr, $i);
		}
		return $arr;
	}
}
?>
надявам се този клас да ти помогне :)
 
И аз можех да намеря метода,но е съвсем различен,а проектами вече е готов,въпрос е във моя случай как да процедирам?
:lol:
 
Там разликата беше ,че имам само единия случай,а сега открих този проблем,и ми трябва средно решение,ще пробвам с ceil но мисля,че и то няма да свърши работа ако правилно помня. :idea:
 
Radko каза:
Нали искаш 3.4 да ти го закръгля на 4. Еми точно тома прави ceil...........
Пак казвам ,не схвана идеята,трябва ми среден вариант ,при който и двете да го има floor/ceil/round всичко в едно,погледни първия пост...
:)
 
добре не съм те разбрал, ама не те разбирам пак

как така всичко във едно floor и ceil са две противоположни, смесеното им на тях е round ползвай него, какъв е проблема?

http://www.php.net/manual/en/function.round.php

PHP:
<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
?>
 
PHP:
function countPages($var) {
$round = round($var); // закръглено

if($var > $round):  // ако числото е по-голямо от закръгленото
$pages = $round++;  // то страниците са с 1 от закръгленото число
else:
$pages = $round; // ако не то страниците са равни на закръгленото число.
endif;

return $pages

}

echo countPages(3.5); // Ще върне 4
 
Radko каза:
добре не съм те разбрал, ама не те разбирам пак

как така всичко във едно floor и ceil са две противоположни, смесеното им на тях е round ползвай него, какъв е проблема?

http://www.php.net/manual/en/function.round.php

PHP:
<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
?>
Да пак не ме разбра,имам два възможни варианта и понякога трябва да е round Понякога закръгляне към по малко,точно според изчисленията в първия ми пост.Методът на deam0n май ще помогне,след малко ще го пробвам и ще споделя.
:?:
 
47/12=3.9166666
като реално аз имам 4 страници
12
12
12
11
и в този случай нормалното закръглане си върши работата 3,9=>4
но ако е
41/12 = 3,416666666
и реално аз имам 4 страници
12
12
12
5

Значи и в двата варианта ако ползваш ceil както ти казах ще ти върне 4 не виждам отново къде ти е проблема, ceil(3.41666) ще ти върне 4....
 
Нещо не схващам ... Просто ограничи на страница да има максимум и минимум символи и стигне ли до лимита да ги показва следващите на друга страница.

Ако не успееш.Ще направя аз един опит и ще ти дам да опиташ
 

Back
Горе