【问题标题】:How can i pass array_column value to another array - PHP我如何将 array_column 值传递给另一个数组 - PHP
【发布时间】:2018-05-04 15:23:51
【问题描述】:

我正在为我的出勤报告生成 csv 文件,这是我关于选择所有学生及其日志的查询:

    $students = User::has('userStudentAttendance')->with(['userStudentAttendance' => function($query) use ($details,$search_from, $search_to){
        $query->where('status', $details);
        $query->where(function($query) use ($search_from, $search_to){
            $query->whereBetween(DB::raw('Date(created_at)'), [$search_from, $search_to]);
        });
        $query->groupby('user_id')->groupby(DB::raw('Date(created_at)'));
    }])
    ->leftjoin('sys_user_student', 'sys_user_student.user_id', '=', 'sys_user.user_id')
    ->leftjoin('sys_mf_section', 'sys_mf_section.section_id', '=', 'sys_user_student.section_id')
    ->leftjoin('sys_mf_grade', 'sys_mf_grade.grade_id', '=', 'sys_mf_section.grade_id')     
    ->where('user_type_id', '4')
    ->where('sys_mf_section.section_id', $request->getParam('section_id'))
    ->where('sys_mf_grade.grade_id', $request->getParam('grade_id'))    
    ->orderBy('sys_user.last_name') 
    ->get();

    if ($students->count() > 0)
    {

        echo "<pre>";
        var_dump($test_array);
        exit();

        $csv = $this->csv;

        $csv->exportHeader('attendance (' . date_format(date_create($request->getParam('search_from')),"M-d-Y") . ' - ' . date_format(date_create($request->getParam('search_to')),"M-d-y") . ')');
        $csv->startInstance();

        $csv->addRow([                  
                'Student No.',
                'Fullname',
                'Gender',
                'Date & Time'
            ]);

        foreach ($students as $student) {

            $logs = $student->userStudentAttendance;
            $logs_array = array_column($logs, 'created_at');

            $csv->addRow([                  
                $student->identification_number,
                $student->last_name.", ".$student->first_name,
                $student->gender,
                $student->userStudentAttendance
            ]);
        }

        $csv->endInstance();

        die();
    }

$userStudentAttendance 给出了一个json 对象,所以我使用了php 来显示它

$logs = json_decode($userStudentAttendance)

将其转换为关联数组,然后将其转换为 array_column 以获取我想要显示的唯一列

$logs_array = array_column($logs, 'created_at')

然后我在$csv-&gt;addRow([]) 中更改了$student-&gt;userStudentAttendance

现在看起来像这样:

         foreach ($students as $student) {

            $csv->addRow([                  
                $student->identification_number,
                $student->last_name.", ".$student->first_name,
                $student->gender,
                $logs_array
            ]);
        }

那么当现在将其转换为 csv 时,$logs_array 的行是空的。怎么了?谁能帮我?提前致谢

【问题讨论】:

  • 添加第二个参数 true 来获取数组? $logs = json_decode($userStudentAttendance, true)
  • 我试过了,还是一样 :( ,它只给了我一个单词“Array”
  • $logs_array 的值是多少?有没有什么?还是为空?
  • 嗨 @u_mulder $logs_array 有我需要的值,但是当我把它放到 $csv-&gt;addRow([]) 时它变成了 null
  • 如果$logs_array 是数组,那么我想addRow 会跳过这个数组值,因为它希望这个值是一个字符串

标签: php mysql arrays csv


【解决方案1】:

我想,addRow 期望参数数组的每个项目都是一个字符串,因此可以将它放入 csv 文件中。您对array_column 的调用返回不是字符串的数组。这就是为什么你需要implode数组值,例如:

$csv->addRow([                  
    $student->identification_number,
    $student->last_name.", ".$student->first_name,
    $student->gender,
    implode(',', $logs_array)    // Here we implode values
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2014-04-05
    • 2021-12-31
    • 1970-01-01
    • 2011-11-07
    • 2017-06-10
    • 2015-02-12
    相关资源
    最近更新 更多