Подсчет строк по array_push - PullRequest
       20

Подсчет строк по array_push

0 голосов
/ 18 января 2019

Я немного застрял здесь

У меня есть массив, который я экспортирую с помощью 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');

1 Ответ

0 голосов
/ 18 января 2019

Почему бы не создать еще один свернутый массив внутри $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;
}
...