Ich versuche jetzt schon seit zwei Tagen eine Funktion zu schreiben die Abfragen anhand des Inhalts eines Arrays durchführt. Alleine gebe ich es auf, eventuell habe ich ja einen völlig falschen Ansatz gewählt.
Über ein Formular (POST) werden "ID's" übertragen welche ich dann in ein Array packe. Das funktioniert soweit 1A:
Diese IDs brauche ich um von einer externen Seite Daten per XML anzufragen. Jetzt ist es aber so, dass ich maximal ca. 50 ID's gleichzeitig abfragen kann. Deswegen habe ich versucht eine Schleife zu erstellen. Mit der Funktion "array_slice" nehme ich mir die ersten 50 ID's und mache dann die Abfrage, dann sollen weitere 50 aus dem Array genommen werden usw.
Die Abfrage inkl. Schleife funktioniert, allerdings wird entweder zu viel abgefragt oder zu wenig.
Versucht hatte ich mittlerweile fast alles, for-Schleifen, do-while-Schleifen, if, elseif usw.
Hier ist mein aktueller Versuch:
Als Beispiel habe ich 69 ID's abgefragt. Davon werden aber nur 41 ausgegeben.

Das elseif wird ausgeführt und die Variablen haben auch die korrekten Werte, ich gehe aber davon aus, weil das foreach oben im Code ist, werden diese Variablen gar nicht mehr berücksichtigt.
Liege ich da richtig? Und noch wichtiger, gäbe es hierfür einen einfacheren Weg?
Über ein Formular (POST) werden "ID's" übertragen welche ich dann in ein Array packe. Das funktioniert soweit 1A:
PHP-Code:
Array
(
[0] => 638
[1] => 639
[2] => 640
[3] => 641
[4] => 642
[5] => 643
[6] => 644
[7] => 645
[8] => 1912
[9] => 1914
[10] => 1916
[11] => 1918
[12] => 4005
[13] => 11936
)
Die Abfrage inkl. Schleife funktioniert, allerdings wird entweder zu viel abgefragt oder zu wenig.
Versucht hatte ich mittlerweile fast alles, for-Schleifen, do-while-Schleifen, if, elseif usw.
Hier ist mein aktueller Versuch:
PHP-Code:
<?php
$items = count ($typeIDs); // TOTAL ID's aus dem Array
$max_query = 40; // Maximal 40 IDs pro Abfrage
$queries = ceil ($items / $max_query); //rundet $items / $max_query auf ganze Zahl. Bestimmt die Abfrageanzahl.
$counter = 0; // Zähler für Abfragen. Wird zusammen mit $queries für Schleifen und IF Argumente benötigt.
$start_slice = 0; // Variable für array_slice
$end_slice = 41; // Variable für array_slice
if ($items > $max_query) { // Wenn mehr als 41 ID starte Schleife
do {
$sliced=array_slice($typeIDs, $start_slice, $end_slice);
foreach($sliced as $typeid) {
echo "<tr><td>$typeid</td><td>$start_slice</td><td>$end_slice</td></tr>";
}
if ($counter >= 1) { //slice Variablen sollen erst ab dem zweiten Durchgang erhöht werden, ansonsten startet es nicht bei 0
$start_slice = $start_slice + 41;
$end_slice = $end_slice + 41;
}
elseif ($counter = $queries) { //führe diesen Code aus bei der letzten Abfrage. Bei zwei Abfragen wird nur dieser Block ausgeführt.
$end_slice = ($items - $end_slice)+$end_slice; //ermittelt die grösste/letzte NR im Array
$start_slice = $start_slice + 41;
}
else {
//keine Verwendung :(
}
$counter = $counter + 1 ;
}while ($counter < $queries);
}
else {
//führe normalen code aus ohne schleife
}
?>

Das elseif wird ausgeführt und die Variablen haben auch die korrekten Werte, ich gehe aber davon aus, weil das foreach oben im Code ist, werden diese Variablen gar nicht mehr berücksichtigt.
Liege ich da richtig? Und noch wichtiger, gäbe es hierfür einen einfacheren Weg?

Kommentar