2017-01-13 5 views
1

私は.csvというファイルを使ってダウンロード可能なファイルを作成していました。私はfirst_nameでアルファベット順にデータを並べ替える必要がありますので、asort('$user->first_name');を使ってみましたが、エラーに終わりました。私はおそらく皆さんが私を助けることができる全体のコードを表示します。phpを使ってcsv列のデータ配列をソートする方法は?

public function getTransportationReport() 
    { 
    header... 

    $file = fopen('php://output', 'w'); 

    fputcsv($file, array('Departure Location', 'First Name', 'Last Name', 'Group Name', 'Unit', 'Unit Number', 'Phone Number', 'Email Address')); 

    $rowed = array(); 
    $auth_event = \App\Group::find(session()->get('event-id')); 
    $bookings = \App\EventBookings::where('group_id', '=', $auth_event->group_id)->where('chalet_id', '!=', 0)->get(); 
     if ($bookings->count()) { 
      foreach ($bookings as $booking) { 
      $event_group = \App\EventGroup::find($booking->eg_id); 
       if ($event_group) { 
       $chalet = \App\Chalet::find($booking->chalet_id); 
        if ($chalet) { 
        $transpoCharges = \App\EventBookingCharges::where('booking_id', '=', $booking->booking_id)->where('charge_key', 'LIKE', 'transportation')->get(); 
         if ($transpoCharges->count()) { 
          foreach ($transpoCharges as $transpoCharge) { 
          $jdecode = json_decode($transpoCharge->json); 
          $user = \App\User::find($transpoCharge->user_id); 
          $paidCharges = \App\EventBookingCharges::where('booking_id', '=', $booking->booking_id)->where('status','=',1)->where('user_id','=',$user->user_id)->sum('amount'); 

           if ($user) { 
            $rowed[] = array(
            $jdecode->location, 
            $user->first_name, 
            $user->last_name, 
            $event_group->name, 
            $chalet->name, 
            $chalet->unit_no, 
            $user->phone, 
            $user->email, 
           ); 

           } 
          } 
         } 
        } 
       } 
      } 
     $data = $rowed; 
      foreach ($data as $row) { 
      fputcsv($file, $row); 
      } 
     } 

    exit(); 
     if (Auth::user()->user_level == 2) { 
      return Redirect::to($auth_event->alias . '/app/etranspo'); 
     } else { 
      return Redirect::to('/app/' . $auth_event->alias . '/etranspo'); 
     } 
    } 

私はボタンをクリックした場合にのみfile not found表示されますが、私は右のボタンをクリックしてsave asを選択した場合には、エラーがerror ReportsController.php line 490 [ラインASORT(する$ user-> FIRST_NAMEを)言って.csvファイルをダウンロードします。である]とIndirect modification of overloaded property App\User::$first_name has no effect

+0

エラーログを表示してください。 – Flummox

+0

@Flummox 'errors ReportsController.php line 490' [asort($ user-> first_name);という行です。 ]と 'オーバーロードされたプロパティの間接的変更App \ User :: $ first_nameは何の効果もありません ' – Newbie

+1

あなたの質問に追加してください。 – Flummox

答えて

0

あなたは、このような配列データをソートしたい:

$data = $rowed; 

// sort the data by a user specified function 
uasort($data, function($a, $b) { 
    // compare by first name (index 1 in the array) 
    return strcmp($a[1], $b[1]); 
}); 

foreach ($data as $row) { 
    fputcsv($file, $row); 
} 

あなたはuasort here上のドキュメントを見つけることができます。

+0

こんにちはクリストフさん、どうもありがとうございました。それはうまくいきましたが、あなたの必要性をコード化してデータを降順で並べ替えるようにしました。もう一度ありがとうございました – Newbie

+1

@Newbie私はC++の構文を使っています( 'std :: sort'は、要素が小さければ真を返す関数を取ります、私は愚かです)。 PHPは3ウェイ比較を使用します。小さい場合は-1、等しい場合は0、大きい場合は1。 strcmpを使用するように修正しました。 – Christoph

+0

ありがとう – Newbie

関連する問題