php- Paginieren Sie Daten aus dem Array

Lesezeit: 4 Minuten

Ich erstelle ein WordPress-Plugin zur Integration in unser Bibliothekssystem. Ich versuche, eine Seite mit einem Suchformular zu erstellen, um die Datenbank zu durchsuchen. Ich habe eine API auf unserem Bibliotheksserver erstellt (er befindet sich in unserem lokalen Netzwerk), damit die Website mit unserem Bibliotheks-Backend verbunden werden kann.

Ich versuche, Ergebnisse aus der API zu paginieren, die Daten sind in JSON. Ich habe den folgenden Code erstellt, um den JSON von der API zu erhalten und ihn in ein PHP-Array umzuwandeln, er implementiert noch keine Suche:

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


} 

hier ist die ausgabe:

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"
  }
}

Ich versuche, eine Paginierung zu erstellen, da einige der Abfragen 50 oder mehr Bücher enthalten. Ich habe das schon einmal mit mysql gemacht, aber ich kann nicht herausfinden, wie man es mit einem Array macht.

Danke!

  • mögliches Duplikat von I want a pagination to my options page of wordpress plugin?

    – Brasilo

    25. Oktober 2013 um 16:55 Uhr

  • Müssen Sie eine Paginierung für das Array implementieren, weil die API, auf die Sie verweisen, keinen Offset und keine Länge bietet, die mit dem Suchbegriff übergeben werden können? Wenn ja, möchten Sie die Suchabfrage bei jeder Anfrage ausführen und immer eine Teilmenge des Arrays zurückgeben?

    – JRam

    25. Oktober 2013 um 17:00 Uhr


Das Folgende ist der Prototyp des Codes, den Sie für die Paginierung verwenden würden. Ändern Sie ihn einfach, um die gewünschten Ergebnisse zu erzielen.

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="https://stackoverflow.com/yourpaginationpage.php?paramsfordataonnextpage=&page=<?=$j?>"><u><?=$j?></u></a></li>
                   <?}else{?>
                        <li style="display: inline;"><a href="https://stackoverflow.com/yourpaginationpage.php?paramsfordataonnextpage=&page=<?=$j?>"><?=$j?></a></li>


                   <?}}?>
</div>
</body>
...
</html>

Ein einfaches und sauberes Beispiel zum Paginieren eines Arrays, das funktioniert und in Ordnung getestet wurde 🙂

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',
)
 */

1001790cookie-checkphp- Paginieren Sie Daten aus dem Array

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy