2016-06-02 7 views
0

Ich habe vor kurzem begonnen Laravel zu lernen und ich versuche, die API von whmcs für ein Projekt zu implementieren. Ich möchte ein Array durchlaufen, die ID mehrerer Support-Tickets (Konversationen) abrufen und diese IDs an eine Funktion übergeben, die mein Back-End aufruft, um diese Tickets abzurufen.Looping-Trog-Array und Daten an die Funktion übergeben

Die folgende Funktion gibt alle Tickets zurück, die ein Benutzer besitzt. Es enthält die Ticket-ID (tid) und mit der folgenden Funktion muss ein zweiter API-Aufruf erfolgen, um den Inhalt des Tickets abzurufen.

public function getTickets($userid) 
    { 
     $tickets = Whmcs::execute('gettickets', 
      array(
       'clientid' => $userid, 
      ) 
     ); 

     return $tickets['tickets']; 

    } 

$ Tickets [ 'Ticket'] enthält dieses Array:

{"ticket": 
    [{" 
     id":"2", 
     "tid":"363592", 
     "deptid":"1", 
     "userid":"1", 
     "name":"Ilyas Deckers", 
     "email":"[email protected]", 
     "cc":"","c":"lOXHYuKV", 
     "date":"2016-06-02 13:50:16", 
     "subject":"Another ticket", 
     "status":"Open", 
     "priority":"Medium", 
     "admin":"","attachment":"","lastreply":"2016-06-02 13:50:16","flag":"0","service":""}, 

    { "id":"1", 
     "tid":"7", 
     "deptid":"1", 
     "userid":"1", 
     "name":"Ilyas Deckers", 
     "email":"[email protected]","cc":"","c":"76Rl9wKG", 
     "date":"2016-06-02 12:28:47","subject":"Theory of design","status":"Customer-Reply","priority":"Medium","admin":"","attachment":"","lastreply":"2016-06-02 12:30:03","flag":"0","service":""}]} 

Dieses Array hat 2 Tickets, ID 1 und ID 2. Wenn ich wissen will, was der Inhalt dieser Tickets beträgt I können diese Daten mit der folgenden erhalten:

function getTicket($id) 
     { 
      $ticket = Whmcs::execute('getticket', 
       array(
        'ticketid' => $id, 
       ) 
      ); 

      return $ticket; 
     } 

Diese dieses Array zurückgibt, wenn ich eine ID übergeben:

{ 
    "result":"success", 
    "ticketid":"1", 
    "tid":"7", 
    "name":"Ilyas Deckers", 

    ... 

    "priority":"Medium", 
    "admin":"", 
    "lastreply":"2016-06-02 12:30:03", 
    "flag":"0","service":"", 
    "replies":{ 
    "reply":[{ 
     "userid":"1", 
     "contactid":"0", 
     "name":"Ilyas Deckers", 
     "email":"[email protected]", 
     "date":"2016-06-02 12:28:47", 
     "message":"Hi Steve,\r\n\r\nVisual hierarchy is one of the most important principles behind effective web design. We will see how you can use some very basic exercises in your own designs to put these principles into practice.\r\n\r\nDesign is a funny word. Some people think design means how it looks. But of course, if you dig deeper, it's really how it works.\r\nAt it's core, design is all about visual communication: To be an effective designer, you have to be able to clearly communicate your ideas to viewers or else lose their attention.\n\n----------------------------\nIP Address: 127.0.0.1", 
     "attachment":"", 
     "admin":""}, 
    { 
     "userid":"1", 
     "contactid":"0", 
     "name":"Ilyas Deckers", 
     "email":"[email protected]", 
     "date":"2016-06-02 12:30:03", 
     "message":"Hi Steve,\r\n\r\nVisual hierarchy is one of the most important principles behind effective web design. We will see how you can use some very basic exercises in your own designs to put these principles into practice.\r\n\r\nDesign is a funny word. Some people think design means how it looks. But of course, if you dig deeper, it's really how it works.\r\nAt it's core, design is all about visual communication: To be an effective designer, you have to be able to clearly communicate your ideas to viewers or else lose their attention.", 
     "attachment":"863372_Clientv2.PNG", 
     "admin":"", 
     "rating":"0" 
    }]}, 
    "notes":""} 

Wie kann ich $ id = 1 und $ id = 2 durch die gleiche Funktion übergeben und diese Ergebnisse in einem Array kombinieren, um in einer foreach-Schleife in meiner Vorlage zu verwenden? Ich dachte daran, das erste Array zu durchlaufen, die ID zu bekommen und sie durch die Funktion getTicket ($ id) zu übergeben. Das funktioniert, aber gibt nur ein Ergebnis.

$tickets = $this->getTickets($uid);     
    foreach ($tickets['ticket'] as $getid) 
    { 
     $id = $getid['id']; 
     $this->getTicket($id); 

     return $ticket; 
    } 

Antwort

3

Sie geben etwas in Ihre foreach() - Schleife zurück. Dies bedeutet, dass es in der ersten Schleife stoppt.

Man könnte so etwas wie tun:

$tickets = $this->getTickets($uid); 

$tickets_content = []; 

foreach ($tickets['ticket'] as $getid) 
{ 

    $id = $getid['id']; 

    $tickets_content[] = $this->getTicket($id); 

} 

return $tickets_content; 
0

Vielleicht Sammlungen mit

return collect($this->getTickets($uid))->map(function($ticket){ 

    return [$ticket, $this->getTicket($ticket['id'])]; 

})->flatten(1); 
Verwandte Themen