2016-06-30 5 views
0

Ich bin auf der Suche nach invoices von unten JSON in einem separaten Array.Holen Sie sich alle Schlüssel-basierte Wert aus einem JSON-Array Objekt in PHP

[ 
    { 
     "id":1, 
     "name":"Demo Name", 
     "email":"[email protected]", 
     "mobile":"881730344", 
     "mobilealt":"78693446777", 
     "gender":"male", 
     "address":"102a sdf", 
     "description":"Super admin role and super admin permissions", 
     "profileimage":"profileimage\/team1.jpg", 
     "status":"active", 
     "created_at":null, 
     "updated_at":"2016-06-29 17:08:24", 
     "deleted_at":null, 
     "under_id":0, 
     "assign_at":"2016-05-11 10:41:50", 
     "children":[ 
     { 
      "id":17, 
      "under_id":1, 
      "name":"Some Name", 
      "children":[ 
       { 
        "id":35, 
        "under_id":17, 
        "name":"test sub user ", 
        "children":[ 

        ], 
        "invoices":[ 

        ] 
       }, 
       { 
        "id":36, 
        "under_id":17, 
        "name":"Harsh", 
        "children":[ 

        ], 
        "invoices":[ 

        ] 
       } 
      ], 
      "invoices":[ 

      ] 
     }, 
     { 
      "id":18, 
      "under_id":1, 
      "name":"Demo Demo Sname", 
      "children":[ 

      ], 
      "invoices":[ 
       { 
        "order_id":31, 
        "sum":161500, 
        "month":"May", 
        "user_id":18 
       } 
      ] 
     }, 
     { 
      "id":20, 
      "under_id":1, 
      "name":"Divya", 
      "children":[ 

      ], 
      "invoices":[ 

      ] 
     }, 
     { 
      "id":25, 
      "under_id":1, 
      "name":"Dhiraj", 
      "children":[ 
       { 
        "id":19, 
        "under_id":25, 
        "name":"New user", 
        "children":[ 
        { 
         "id":33, 
         "under_id":19, 
         "name":"Demo Sub Sub user", 
         "children":[ 

         ], 
         "invoices":[ 

         ] 
        } 
        ], 
        "invoices":[ 
        { 
         "order_id":32, 
         "sum":40000, 
         "month":"July", 
         "user_id":19 
        } 
        ] 
       } 
      ], 
      "invoices":[ 

      ] 
     } 
     ] 
    } 
] 

Ich denke an rekursive Schleife. Aber ich habe die folgende Methode ausprobiert, die anscheinend nicht funktioniert.

public function take_invoices($array){ 
     static $arrinvoices = []; 
     foreach($array as $item){ 
      if(count($item->invoice) > 0){ 
      dd($item->invoice);    //------------->Laravel function to die and dump. its always empty 
       $arrinvoices[] = $item->invoice; 
      } 
      if(count($item->children) > 0){ 
      $this->take_invoices($item->children); 
      } 
     } 

    return $arrinvoices; 
    } 

Vielen Dank! (! Im Voraus)

+0

gibt es viele leere ' "Rechnungen"', sollten sie weggelassen werden? – RomanPerekhrest

+0

Sie haben mehrere Rechnungen ... Welche Sie brauchen ?? –

+0

Ja, ich versuche, das leere einmal zu überspringen. – user3201500

Antwort

2

Die Lösung mit preg_match_all und preg_replace Funktionen:

// $json_data - is your initial json string 
// the next step takes all non-empty 'invoices' 
preg_match_all("/\"invoices\":\[([^]]+)\]/", preg_replace("/\f|\v|\h|\t|\s+/", "", $json_data), $matches); 
$invoices = []; 
if (!empty($matches) && isset($matches[1])) { 
    $invoices = json_decode("[" . implode(",", $matches[1]) . "]", true); 
} 

print_r($invoices); 

Der Ausgang:

Array 
(
    [0] => Array 
     (
      [order_id] => 31 
      [sum] => 161500 
      [month] => May 
      [user_id] => 18 
     ) 

    [1] => Array 
     (
      [order_id] => 32 
      [sum] => 40000 
      [month] => July 
      [user_id] => 19 
     ) 
) 
+0

Ich bekomme die Rechnungen, aber jetzt, wenn ich versuche, die "Kinder" zu bekommen, dann zeigt es keine Kinder. – user3201500

+0

@ user3201500, Sie haben nach * gefragt, um Rechnungen * zu erhalten. Als "Rechnungen" sind unabhängige Elemente in dieser Struktur, aber "Kinder" -Elemente sind Elemente mit unbekannten verschachtelten Ebenen. – RomanPerekhrest

+0

Ja, tatsächlich versuche ich eine globale Funktion zu erstellen, um irgendeinen Wert von diesem Json-Objekt zu bekommen. So kann es leicht geholt werden. – user3201500

Verwandte Themen