繁体   English   中英

如何使用php为csv列排序数据数组?

[英]How to sort an array of datas for csv column using php?

我正在使用php创建一个.csv下载文件。 我需要按first_name按字母顺序对数据进行排序,所以我尝试使用asort('$user->first_name'); 它结束了一个错误。 我会展示整个代码,也许你们可以帮助我。

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因为它将下载.csv文件,错误说明error ReportsController.php line 490 [asort($ user-> first_name) ); 是]和Indirect modification of overloaded property App\\User::$first_name has no effect

您想要像这样排序数组数据:

$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的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM