2017-01-13 13 views
1

Я создал .csv загружаемый файл с помощью php. Мне нужно отсортировать данные в алфавитном порядке на first_name, поэтому я попытался использовать asort('$user->first_name');, и в результате получится ошибка. Я покажу весь код, может быть, вы, ребята, можете мне помочь.Как отсортировать массив данных для столбца csv, используя php?

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

+0

Просьба отображать журнал ошибок, помогает много. – Flummox

+0

@Flummox Он говорит 'error ReportsController.php line 490' [строка, где asort ($ user-> first_name); is] и «Непрямая модификация перегруженного свойства 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' принимает функцию, которая возвращает true, если элемент меньше, глупо меня). php использует 3-х мерное сравнение: -1 для меньших, 0 для равных, 1 для большего. Исправлено использование strcmp. – Christoph

+0

большое спасибо – Newbie