2017-04-15 5 views
0

Wenn ich diesen Code ausführen:Entfernen unneccesary Arrays in php

$yearRes=DB::table('order') 
      ->select(DB::raw("year(created_at) as y")) 
      ->orderBy("created_at") 
      ->groupBy(DB::raw("year(created_at)"))->get(); 
    foreach ($yearRes as $key => $value) { 
     $totalOrder[]=DB::table('order')->select(DB::raw("year(created_at) as y,sum(item_price) as p,count(id) as i"))->whereYear('created_at', '=', $value->y)->get(); 
    } 

Es zeigt mir dieses:

[[{"y":2016,"p":15050,"i":11}],[{"y":2017,"p":8440,"i":3}]] 

Wenn ich diesen Code ausführen

$abc=json_encode($totalOrder); 
    $a=rtrim($abc); 
    $title=explode('[', $a); 
    $c=implode('', $title); 
    $ac=rtrim($c,']'); 

... das Ergebnis ist dies:

{"y":2016,"p":15050,"i":11}],{"y":2017,"p":8440,"i":3} 

Aber ich möchte die Ausgabe wie folgt aussehen:

{"y":2016,"p":15050,"i":11},{"y":2017,"p":8440,"i":3} 

Was mit meinem Code falsch?

+0

Problem ist nicht klar, was ist Ihre erwartete Ausgabe? – C2486

+1

Warum denken Sie, dass das "unnötige Arrays" sind? Wie beabsichtigen Sie, die Daten anschließend zu verwenden? – walther

Antwort

-1

Sie brauchen nicht alle diese rtrim. Was Sie tun, ist ein Hack und keine echte Lösung.

Was Sie tun müssen, ist ->first() auf dem Code innerhalb der foreach anhängen, in einer solchen:

$yearRes=DB::table('order') 
      ->select(DB::raw("year(created_at) as y")) 
      ->orderBy("created_at") 
      ->groupBy(DB::raw("year(created_at)"))->get(); 
    foreach ($yearRes as $key => $value) { 
     $totalOrder[]=DB::table('order')->select(DB::raw("year(created_at) as y,sum(item_price) as p,count(id) as i"))->whereYear('created_at', '=', $value->y)->get()->first(); 
    } 

Dann können Sie die rtrims und andere unnötige Linien entfernen. Halten Sie einfach die erste Zeile

$abc=json_encode($totalOrder); 
0

Dies wird Ihnen helfen:

echo trim(json_encode(array_column($totalOrder, 0)), '[]'); 
0

Das Wichtigste ist, was Sie mit dem Ausgang tun möchten und/oder wo und wie wollen die Ausgabe zuzugreifen; wie es aussieht ist weniger irrelevant