【问题标题】:Counting rows by array_push通过 array_push 计算行数
【发布时间】:2019-06-12 10:55:09
【问题描述】:

我有点卡在这里

我有一个使用 laravel excel 导出的数组,我基本上是在创建一个类别行,然后是属于该类别的所有后续项目行。

如何正确地将每个 array_push 的计数器添加到 groupItem 数组,以便我可以计算 groupItem 推送之间的每一行并将具有类别信息的行设置为粗体?

基本上,我只想将包含 category_code、category_name 和 category_desc 数据的行加粗,因此我需要根据 array_push 迭代我认为的类别信息

我想我需要设置一个计数,增加 categoryItem array_push 的计数,将该计数存储在一个数组中,然后将这些数组存储的行设置为粗体?

$allgroupResult= array();

    foreach($prices->groups as $group){ 
        $groupItem = array(); 
        $groupItem["category_code"] = $group->category_code;
        $groupItem["category_name"] = $group->category_name; 
        $groupItem["category_desc"] = $group->category_desc;

        array_push($allgroupResult, $groupItem);    

        foreach($group->skus as $sku){
            $skuItem = array(); 
            $skuItem["item_code"] = $sku->sku_info->item->item_code;
            $skuItem["identifier"] = $sku->sku_info->identifier;

            foreach($sku->prices as $price => $amount){
                $skuItem[] = $amount;
            }

            $skuItem[] = strip_tags(html_entity_decode($sku->sku_info->item->desc));

            foreach ($sku->sku_info->details as $details) {

                $skuItem[] = $details->details1;
                $skuItem[] = $details->details2;
                $skuItem[] = $details->details3;

            }

            array_push($allgroupResult, $skuItem);    
        }
    }

    $name = 'File Export';

    $build = Excel::create($name, function ($excel) use ($allgroupResult) {

        $excel->setTitle('File Export');

        $excel->sheet('File  Export', function ($sheet) use ($allgroupResult) {

            $sheet->fromArray($allgroupResult);

            // bold the column headers
            $sheet->getStyle('A1:'.$sheet->getHighestColumn().'1')->getFont()->setBold(true);


            // $count = 2;
            // foreach($excelRows as $one){
            //     $sheet->fromArray($one, null, 'A2');

            //     $sheet->row($count, function($row) {
            //         $row->setFontWeight('bold');
            //     });
            //     $count += count( $one ) + 1;
            // }

            // set the width for the columns that are used 
            $sheet->setWidth('A', 10);
            $sheet->setWidth('B', 24);
            $sheet->setWidth('C', 20);
            $sheet->setWidth('D', 12);
            $sheet->setWidth('E', 10);
            $sheet->setWidth('F', 16);
            $sheet->setWidth('G', 16);
            $sheet->setWidth('H', 16);
            $sheet->setWidth('I', 16);
            $sheet->setWidth('J', 16);
            $sheet->setWidth('K', 16);

        });

    })->download('xlsx');

【问题讨论】:

    标签: php arrays phpexcel laravel-excel


    【解决方案1】:

    为什么不在$allgroupResult 中为每个类别创建另一个折叠数组,所以结构如下:

    array(1) {
      [0] =>
      array(4) {
        'category_code' =>
        string(13) "category_code"
        'category_name' =>
        string(13) "category_name"
        'category_desc' =>
        string(13) "category_desc"
        'skus' =>
        array(3) {
          [0] =>
          string(4) "sku1"
          [1] =>
          string(4) "sku2"
          [2] =>
          string(4) "sku3"
        }
      }
    }
    

    然后您可以在需要获取每个类别的产品数量时执行count($item['skus'])。为此,请尝试对您的 foreach 循环进行以下修改:

    foreach($prices->groups as $group){
        $groupItem = array();
        $groupItem["category_code"] = $group->category_code;
        $groupItem["category_name"] = $group->category_name;
        $groupItem["category_desc"] = $group->category_desc;
    
        $groupItem["skus"] = array();
    
        foreach($group->skus as $sku){
            $skuItem = array();
            $skuItem["item_code"] = $sku->sku_info->item->item_code;
            $skuItem["identifier"] = $sku->sku_info->identifier;
    
            foreach($sku->prices as $price => $amount){
                $skuItem[] = $amount;
            }
    
            $skuItem[] = strip_tags(html_entity_decode($sku->sku_info->item->desc));
    
            foreach ($sku->sku_info->details as $details) {
    
                $skuItem[] = $details->details1;
                $skuItem[] = $details->details2;
                $skuItem[] = $details->details3;
    
            }
    
            $groupItem["skus"][] = $skuItem;
        }
    
        $allgroupResult[] = $groupItem;
    }
    

    【讨论】:

    • 那么我该如何准确计算需要加粗的类别行数?
    • 我的印象是您想将包含 SKU 的类别行加粗。如果这是正确的,那么就像if(count($groupItem["skus"])) { // highlight this row}
    • 该逻辑是否适用于 laravel excel?另外我还没有对此进行测试,但我不确定该数组结构是否会正确导出到 excel,但我会尝试,我会告诉你
    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多