2016-08-03 123 views
0

這裏是我的代碼:Laravel - 減小數組的大小

控制器:

$userOrder = $doctrineOrderRepository->getOrders(Auth::id()); 

學說:

public function getUserOrders($userId) :array 
    { 

     $results = $this->_em->createQueryBuilder() 
      ->select('o.restaurantId as rtId, o.oCount, o.oPrice , 
        o.oCreated', 'o.oId') 
      ->from($this->entityClass, 'o') 
      ->where("o.userId = '{$userId}'") 
      ->andWhere("o.orderItemCount > '0'") 
      ->andWhere("o.orderTotalPrice > '0'") 
      ->getQuery()->getArrayResult(); 

     return $results; 
    } 

我得到這個數組從我的數據庫使用Doctrine:

array:1 [▼ 
    0 => array:5 [▼ 
    "rtId" => 154 
    "oCount" => 2 
    "oPrice" => 33900 
    "oCreated" => DateTime {#677 ▶} 
    "oId" => 17428 
    ] 
] 

我在不同情況下使用這種Doctrine方法。在這種情況下,我只是用所有列表的兩項:RTIDoCount

那麼,如何修改$ userOrder到結果數組轉換爲該波紋管陣列?

array:1 [▼ 
    0 => array:2 [▼ 
    "rtId" => 154 
    "oCount" => 2 
    ] 
] 
+0

減少select stmt中的列? – jitendrapurohit

+0

我不想減少選擇的項目,因爲正如我之前說過的,我在不同的控制器上使用該方法。 – AFN

+2

然後使用foreach取消設置? – jitendrapurohit

回答

1

的foreach在控制器和取消值的$ userOrder這樣

$newArr = array(); 

    foreach($userOrder as $ar) 
    { 
     unset($ar['oPrice']); 
     unset($ar['oCreated']); 
     unset($ar['oId']); 
     $newArr[] = $ar; 
    } 

dd($newArr); 

,你會得到這樣的結果..

array:1 [▼ 
    0 => array:2 [▼ 
    "rtId" => 154 
    "oCount" => 2 
    ] 
] 
0

如果使用Laravel,您可以使用永遠方便的collection類。它有幾十個有用的方法。在這種情況下,你可以這樣做:

$cleanedResults = collect($results)->map(function($item) { 
    return collect($item)->only(['rtId', 'oCount']); 
})->toArray();