2013-11-03 7 views
0

최근에 스크립트에서 페이지 매김을 만들기 위해 array_slice 함수를 사용했습니다. ,PHP 배열 슬라이스 이상한 행동

$cu_page = $_GET['page']; 
$threads_per_page = 15; 
$start_f_value = $cu_page-1; 
$start_f_value = $start_f_value*$threads_per_page; 
$end_f_value = $threads_per_page*$cu_page; 
$thread_order = array_slice($thread_order_P, $start_f_value, $end_f_value); 

지금 그래서 나는 다음 않았다

나는 40 개 값으로 배열을 가지고 (각 값은 스레드)

$thread_order_P = $this->forum_handler->orderThreads($forum_threads); 

그리고 15 스레드 페이지를 표시하려면 문제는 페이지 1 [에코 15 스레드]와 3 [에코 10 개 스레드]를 표시하려고 할 때 pefectly 작동하지만 페이지 2를 표시하려고하면 15 대신에 25 개의 스레드를 표시합니다.

아이디어가 있습니까?

+3

array_slice'에 세 번째 인수가()'슬라이스의 길이 아닌 종료 인덱스입니다. – Barmar

+0

고마워 Barmar, 나는 그것을 옳은 길로 이해하지 못했다. 그것은 지금 완벽하게 작동한다. :) –

답변

1

Barmar가 주석에서 지적한 것처럼 array_slice()의 세 번째 인수는 끝 인덱스가 아니라 슬라이스의 길이입니다. array_slice() 문서에서

:

길이가 주어 긍정적 인 경우, 다음 순서는 그 안에 많은 요소에 달려있을 것이다. 배열이 길이보다 짧으면 사용 가능한 배열 요소 만 나타납니다. 길이가 주어지고 음수이면 배열은 배열의 끝에서부터 많은 요소를 중지시킵니다. 이것이 생략되면, 시퀀스는 오프셋부터 배열의 끝까지의 모든 것을 가질 것이다.

그래서, 다음에 array_slice() 문을 변경 :

$thread_order = array_slice($thread_order_P, $start_f_value, $threads_per_page); 

Demo!