2017-04-11 2 views
0

Ich arbeite an einem Skript, das Rechnungen von einem Onlinedienst anfordert - 100 Rechnungen werden gleichzeitig zurückgegeben. Ich habe die Grundanforderung, die ersten 100 Rechnungen zurückzugeben und die Ergebnisse zu durchlaufen. Hier ist meine aktuellen Code:Implementierung von PHP-Schleifen

// set pagination to page 1 
$page = 1; 

// Request Invoices 
$response = $XeroOAuth->request('GET', $XeroOAuth->url('Invoices', 'core'), array('page' => $page)); 


    if ($XeroOAuth->response['code'] == 200) { 

     // Parse Invoices 
     $invoices = $XeroOAuth->parseResponse($XeroOAuth->response['response'], $XeroOAuth->response['format']); 

     // Get total found invoices 
     $totalInvoices = count($invoices->Invoices[0]); 


     // Loop through found invoices 
     if ($totalInvoices > 0) { 

      foreach ($invoices->Invoices->Invoice as $invoice) { 
       $invoiceNumber = $invoice->InvoiceNumber; 
       // Process Invoice as required 
      } 

     } 

    } else { 

     // Request Error 
    } 

Ich muss das wie folgt erweitern:

  • wenn 100 Rechnungen wurden zurückgegeben ich brauche $ Seite um 1 zu erhöhen und dann eine weitere Anforderung führen Sie die zweite Seite zu bekommen, Rechnungen und verarbeiten diejenigen
  • diese fortgesetzt werden, bis die Gesamtzahl der Rechnungen für die letzte Anforderung zurückgegeben weniger als 100 dann die Ausfahrt nach diesem

kann ich nicht die Logik erhalten korrigieren hier zu verlängern diese mit einer anderen Schleife um die Anforderungen fortzusetzen, bis es weniger als 100 Rechnungen bekommt

Antwort

1

Dies sollte funktionieren:

<?php 

$breakFlag = 0; 

// set pagination to page 1 
$page = 1; 

do { 

    // Request Invoices 
    $response = $XeroOAuth->request('GET', $XeroOAuth->url('Invoices', 'core'), array('page' => $page)); 

    if ($XeroOAuth->response['code'] == 200) { 

     // Parse Invoices 
     $invoices = $XeroOAuth->parseResponse($XeroOAuth->response['response'], $XeroOAuth->response['format']); 

     // Get total found invoices 
     $totalInvoices = count($invoices->Invoices[0]); 

     if ($totalInvoices < 100) { 
      $breakFlag = 1; 
     } 

     // Loop through found invoices 
     if ($totalInvoices > 0) { 

      foreach ($invoices->Invoices->Invoice as $invoice) { 
       $invoiceNumber = $invoice->InvoiceNumber; 
       // Process Invoice as required 
      } 

     } 

     $page += 1; 

    } else { 

     // Request Error 
    } 
} while($breakFlag == 0) 
1

Ich persönlich den Code wickeln würden Sie in einer Funktion haben und dann aufrufen es aus sich selbst heraus, solange du es brauchst.

fetchInvoices(1); 

function fetchInvoices($page) { 
    // Request Invoices 
    $response = $XeroOAuth->request('GET', $XeroOAuth->url('Invoices', 'core'), array('page' => $page)); 

    if ($XeroOAuth->response['code'] == 200) { 

     // Parse Invoices 
     $invoices = $XeroOAuth->parseResponse($XeroOAuth->response['response'], $XeroOAuth->response['format']); 

     // Get total found invoices 
    $totalInvoices = count($invoices->Invoices[0]); 


     // Loop through found invoices 
     if ($totalInvoices > 0) { 

      foreach ($invoices->Invoices->Invoice as $invoice) { 
       $invoiceNumber = $invoice->InvoiceNumber; 
       // Process Invoice as required 
      } 
     } 

     if($totalInvoices == 100) { 
      fetchInvoices($page + 1) 
     } 
    } else { 

     // Request Error 
    } 
}