Сохранение определенного количества строк с помощью array_push - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь сохранить количество определенных элементов массива, чтобы я знал, какую строку стилизовать в laravel excel

То, что я хотел бы сделать, это увеличить мой итератор $rowCount каждый раз, когда я делаю array_push, но каждый раз, когда я специально обрабатываю array_push для $groupItem, я хочу сохранить счет в $boldRows таким образом, чтобы я мог применить стиль только к этим строкам.

$allgroupResult= array();

$rowCount = 2; //since I have a sticky header in the excel file I start the count at 2
$boldRows = array();

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

    array_push($allgroupResult, $groupItem);    

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

        array_push($allgroupResult, $skuItem);    
    }
}

категория 1 с 3 продуктами (всего 4 строки) и категория 2 с 2 продуктами (всего 3 строки) даст мне всего 7 строк, начиная со строки 2. Так что мой ожидаемый результат с этим будет таким: $boldRows будет содержать 2 и 6 для строк категории (потому что мой счет начинается с 2, затем обрабатывает 3 продукта, поэтому следующая строка категории находится в 6)

Как мне этого добиться?

1 Ответ

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

Я бы подумал, что вам просто нужно увеличивать количество строк каждый раз, когда вы помещаете новый элемент в массив и отслеживаете строки, которые вы хотите выделить жирным шрифтом ...

$rowCount = 2; //since I have a sticky header in the excel file I start the count at 2
$boldRows = array();

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

    array_push($allgroupResult, $groupItem); 
    array_push($boldRows, $rowCount++);   // Store count & increment

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

        array_push($allgroupResult, $skuItem);
        $rowCount++;    // Just increment count
    }
}

Возможно, вам придется настроить $rowCount в зависимости от того, как строки соответствуют массивам - массивы основаны на 0, и я не знаю, как будут строиться строки.

На основе PHPExcel Сделать первую строку жирным шрифтом и преобразовать номер строки в строку Excel из Преобразовать A в 1 B в 2 ... Z в 26, а затем AA в 27, AB в 28 (столбец индексы к ссылкам на столбцы в Excel) (изменено для PHP), затем вы можете использовать что-то вроде ...

foreach ( $boldRows as $row )   {
    $cell_name = excelColumnFromNumber($row)."1";
    $objPHPExcel->getActiveSheet()->getStyle( $cell_name )->getFont()->setBold( true );
}

function excelColumnFromNumber($column)
{
    $columnString = "";
    while ($column > 0)
    {
        $currentLetterNumber = ($column - 1) % 26;
        $columnString = chr($currentLetterNumber + 65) . $columnString;
        $column = ($column - ($currentLetterNumber + 1)) / 26;
    }
    return $columnString;
}
...