php- Paginate data from array

I am making a WordPress plugin to integrate with our library system. I am trying to create a page with a search form to search the database. I have created an API on our library server (it is on our local network) so the site can interface with our library back end.

I am trying to paginate results pulled from the API, the data is in json. I have created the following code to get the json from the API and turn it into a PHP array, it does not implement search, yet:

Read More
add_shortcode("book_search_form", "book_search_form");
function book_search_form() {

    $api_url = get_option('api_url');
    $api_key = get_option('api_key');
    $data = file_get_contents("$api_url/book/index.php/name/awesome/$api_key");

    $data = (array)json_decode($data, true);

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


} 

here is the output:

array(2) {
  [0]=>
  array(22) {
    ["barcode"]=>
    string(12) "000015427928"
    ["name"]=>
    string(74) "Janice VanCleave's 201 awesome, magical, bizarre & incredible experiments."
    ["author"]=>
    string(12) "Janice Pratt"
    ["author_last"]=>
    string(9) "VanCleave"
    ["publisher"]=>
    string(11) "Wiley: 1994"
    ["year_pub"]=>
    string(0) ""
    ["edition"]=>
    string(0) ""
    ["genre"]=>
    string(0) ""
    ["checkout"]=>
    string(5) "false"
    ["series"]=>
    string(0) ""
    ["callnum"]=>
    string(5) "507.8"
    ["fiction"]=>
    string(5) "false"
    ["in_house"]=>
    string(5) "false"
    ["timestamp"]=>
    string(10) "1374711656"
    ["outto"]=>
    string(0) ""
    ["duedate"]=>
    string(1) "0"
    ["ISBN"]=>
    string(10) "0585339376"
    ["media_type"]=>
    string(0) ""
    ["print"]=>
    string(5) "false"
    ["BOXID"]=>
    string(0) ""
    ["uid"]=>
    string(1) "0"
    ["printed"]=>
    string(4) "true"
  }
  [1]=>
  array(22) {
    ["barcode"]=>
    string(12) "000015429634"
    ["name"]=>
    string(50) "Our Awesome Earth: Its Mysteries and Its Splendors"
    ["author"]=>
    string(4) "Paul"
    ["author_last"]=>
    string(6) "Martin"
    ["publisher"]=>
    string(35) "Natl Geographic Society: March 1994"
    ["year_pub"]=>
    string(0) ""
    ["edition"]=>
    string(0) ""
    ["genre"]=>
    string(0) ""
    ["checkout"]=>
    string(5) "false"
    ["series"]=>
    string(0) ""
    ["callnum"]=>
    string(3) "050"
    ["fiction"]=>
    string(5) "false"
    ["in_house"]=>
    string(5) "false"
    ["timestamp"]=>
    string(10) "1382550052"
    ["outto"]=>
    string(0) ""
    ["duedate"]=>
    string(1) "0"
    ["ISBN"]=>
    string(10) "0870445456"
    ["media_type"]=>
    string(0) ""
    ["print"]=>
    string(5) "false"
    ["BOXID"]=>
    string(0) ""
    ["uid"]=>
    string(1) "0"
    ["printed"]=>
    string(5) "false"
  }
}

I am trying to create pagination, because some of the queries contain 50 or more books. I have done this before with mysql but I cannot figure out how to do it with an array.

Thanks!

Related posts

Leave a Reply

2 comments

  1. Following is the prototype of the code you would use for pagination ,just alter it to get the desired results.

    if(isset($_GET['page']) && isset($_GET['paramsfordataonnextpage']))
    {
    $page=$_GET['page'];   // get the value of the page from your url
    $recordsPerPage=10; // number of records you want on your page
    $array=//from your service
    $index=($page*$recordsPerPage)-1;
    $recordsToBeDisplayed = array_slice($array,$index,$recordsPerPage);// this array contains all the records you would want to display on a page;
    
    
    
        $total_pages=ceil(count($array)/$recordsPerPage);
        }
    else { 
    
    //use default values
    
    }
    
    <html>...<body><div id="records"><!-- use the array created above to display records -->
        </div>
    <div id="pagination">
    for($j=1;$j<=$total_pages;$j++){
                        if($j==$page)
                       {?>
    
                       <li style="display: inline;"><a href="/yourpaginationpage.php?paramsfordataonnextpage=&page=<?=$j?>"><u><?=$j?></u></a></li>
                       <?}else{?>
                            <li style="display: inline;"><a href="/yourpaginationpage.php?paramsfordataonnextpage=&page=<?=$j?>"><?=$j?></a></li>
    
    
                       <?}}?>
    </div>
    </body>
    ...
    </html>
    
  2. One simple and clean example to paginate an array, working and tested OK 🙂

    function PaginateArray($input, $page, $show_per_page) {
    
      $page = $page < 1 ? 1 : $page;
    
      $start = ($page - 1) * ($show_per_page);
      $offset = $show_per_page;
    
      $outArray = array_slice($input, $start, $offset);
    
      var_export($outArray);
     }
    
      $input =   array("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20");
    
      //page 1
      PaginateArray($input, 1, 3);//inputs: array, page, records per page
     /*
      array (
       0 => '1',
       1 => '2',
       2 => '3',
     )
      */
    
      //page 2
      PaginateArray($input, 2, 3);//inputs: array, page, records per page
     /*
     array (
      0 => '4',
      1 => '5',
      2 => '6',
    )
     */