2016-09-12 84 views
0

我在Laravel以下請求:如何設置查詢結果鍵?

$name = Place::where("status", "1", function ($query) use ($request) { 

      if (($from = $request->get("from"))) { 
       $query->where('name', 'like', $from . '%'); 
      } 

      if (($to = $request->get("to"))) { 
       $query->where('name', 'like', $to . '%'); 
      } 

     })->orderBy('name', 'desc')->get(); 

我得到類似結果爲:

{ 
    "id": 2, 
    "name": "Lena" 
}, 
{ 
    "id": 1, 
    "name": "Baran" 
} 

如何設置這兩個結果行的鑰匙?我想做的事:

name_one = { 
     "id": 2, 
     "name": "Lena" 
    }, 
    name_two = { 
     "id": 1, 
     "name": "Baran" 
    } 
+0

$ ss = array('name_one','name_two'); $ res = array_combine($ ss,json_decode($ your_array,true));的print_r($水庫); – JYoThI

+0

'$ name'是集合 – Bedouin

+0

它看起來像json數據,但它的無效json – JYoThI

回答

0

一個keyBy('name');get()功能查找後keyBy例如你可以試試這個代碼

public function getCollectinos() 
    { 
     $collection = collect([ 
      ['id' => '1', 'product' => 'Chair'], 
      ['id' => '2', 'product' => 'Desk'], 
      ['id' => '3', 'product' => 'Bookcase'], 
     ]); 


     $grouped = $collection->groupBy(function ($item, $key) { 
      return 'name_'.$this->number_to_word($item['id']); 
     }); 

     $array = $grouped->toArray(); 
     dd($array); 
    }  



    public function number_to_word($num = '') 
    { 
     $num = (string) ((int) $num); 

     if((int) ($num) && ctype_digit($num)) 
     { 
      $words = array(); 

      $num = str_replace(array(',' , ' ') , '' , trim($num)); 

      $list1 = array('','one','two','three','four','five','six','seven', 
       'eight','nine','ten','eleven','twelve','thirteen','fourteen', 
       'fifteen','sixteen','seventeen','eighteen','nineteen'); 

      $list2 = array('','ten','twenty','thirty','forty','fifty','sixty', 
       'seventy','eighty','ninety','hundred'); 

      $list3 = array('','thousand','million','billion','trillion', 
       'quadrillion','quintillion','sextillion','septillion', 
       'octillion','nonillion','decillion','undecillion', 
       'duodecillion','tredecillion','quattuordecillion', 
       'quindecillion','sexdecillion','septendecillion', 
       'octodecillion','novemdecillion','vigintillion'); 

      $num_length = strlen($num); 
      $levels = (int) (($num_length + 2)/3); 
      $max_length = $levels * 3; 
      $num = substr('00'.$num , -$max_length); 
      $num_levels = str_split($num , 3); 

      foreach($num_levels as $num_part) 
      { 
       $levels--; 
       $hundreds = (int) ($num_part/100); 
       $hundreds = ($hundreds ? ' ' . $list1[$hundreds] . ' Hundred' . ($hundreds == 1 ? '' : 's') . ' ' : ''); 
       $tens  = (int) ($num_part % 100); 
       $singles = ''; 

       if($tens < 20) 
       { 
        $tens = ($tens ? ' ' . $list1[$tens] . ' ' : ''); 
       } 
       else 
       { 
        $tens = (int) ($tens/10); 
        $tens = ' ' . $list2[$tens] . ' '; 
        $singles = (int) ($num_part % 10); 
        $singles = ' ' . $list1[$singles] . ' '; 
       } 
       $words[] = $hundreds . $tens . $singles . (($levels && (int) ($num_part)) ? ' ' . $list3[$levels] . ' ' : ''); 
      } 

      $commas = count($words); 

      if($commas > 1) 
      { 
       $commas = $commas - 1; 
      } 

      $words = implode(', ' , $words); 

      $words = trim(str_replace(' ,' , ',' , $this->trim_all( $words )) , ', '); 
      if($commas) 
      { 
       $words = $this->str_replace_last(',' , ' and' , $words); 
      } 

      return $words; 
     } 
     else if(! ((int) $num)) 
     { 
      return 'Zero'; 
     } 
     return ''; 
    } 


    public function str_replace_last($search , $replace , $str) 
    { 
     if(($pos = strrpos($str , $search)) !== false) { 
      $search_length = strlen($search); 
      $str = substr_replace($str , $replace , $pos , $search_length); 
     } 
     return $str; 
    } 


    public function trim_all($str , $what = NULL , $with = ' ') 
    { 
     if($what === NULL) 
     { 
      // Character  Decimal  Use 
      // "\0"   0   Null Character 
      // "\t"   9   Tab 
      // "\n"   10   New line 
      // "\x0B"   11   Vertical Tab 
      // "\r"   13   New Line in Mac 
      // " "   32   Space 

      $what = "\\x00-\\x20"; //all white-spaces and control chars 
     } 

     return trim(preg_replace("/[".$what."]+/" , $with , $str) , $what); 
    } 

輸出:

enter image description here

0

,你可以做以下

$collection = collect([ 
    ['product_id' => 'prod-100', 'name' => 'desk'], 
    ['product_id' => 'prod-200', 'name' => 'chair'], 
]); 

$keyed = $collection->keyBy('product_id'); 

$keyed->all(); 

/* 
    [ 
     'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'], 
     'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'], 
    ] 
*/ 
相關問題