Можно ли поместить корпус переключателя внутрь цикла? - PullRequest
0 голосов
/ 18 марта 2019

Сценарий: я собираюсь извлечь некоторые данные из базы данных и вывести их через pdf. Я использую FPDF, чтобы сделать это, и я нахожусь на той части, где мне нужно получить высоту из базы данных и отобразить ее в соответствии с цветом.

Например:

  • Если высота равна 2-3 метра , то цвет должен быть коричневый
  • Если высота составляет 1-2 метра , то цвет должен быть желтый
  • Если высота <1 метр </strong>, то цвет должен быть синий

enter image description here

МОЯ ПРОБЛЕМА Я пытаюсь вставить switch case в while loop, чтобы поместить height в таблицу, где отображаются некоторые другие данные. На рисунке ниже показано, где я хочу реализовать цветные ячейки . Это должно быть реализовано в столбце «Высота SS».

enter image description here

Но это не сработало и дало мне эту ошибку.

enter image description here

Это мои коды.

<?php

require('connection.php');

$sql="SELECT * FROM table ORDER BY ssh REGEXP '^[^A-Za-z0-9]' ASC, ssh DESC";

$records=mysql_query($sql);
$fetch = mysql_fetch_array($records);

require("library/fpdf.php");

$pdf = new PDF('p', 'mm', 'Legal');
$title = 'Storm Surge Warning';
$pdf->SetTitle($title);
$pdf->AliasNbPages('{pages}');
$pdf->SetAutoPageBreak(true,25);

$pdf->AddPage();

$pdf->SetBorders(array('LT', 'LT', 'LT', 'LT', 'TLR'));
$pdf->SetWidths(array(30, 27, 35, 51, 51));
$pdf->SetAligns(array('C', 'C', 'C', 'L', 'L'));

$pdf->SetFont('Arial', 'B', 10);

$pdf->Row(array("SS Height",
            "Provinces",
            "Low Lying Coastal Areas in the Municipalities of:",
            "IMPACTS",
            "ADVICE/Actions to Take"), 1);

$pdf->SetFont('Arial', '', 11);

while($row = mysql_fetch_array($records)){

$pdf->Row(array(
switch ($row['ssh']) { 
case '2-3Meters' : 
$pdf->SetFillColor(204, 153, 0); 
$pdf->Cell($row['ssh'], 1, 1, 'L', TRUE); 
break; 
case '1-2Meters' : 
$pdf->SetFillColor(255, 255, 0); 
$pdf->Cell($row['ssh'], 1, 1, 'L', TRUE); 
break; 
case '<1Meter' : 
$pdf->SetFillColor(51, 153, 255); 
$pdf->Cell($row['ssh'], 1, 1, 'L', TRUE); 
break; 

default: 
$pdf->Cell($row['ssh'], 1, 1, 'L', FALSE); 
break; 
}

    $row['provi'],
    $row['muni'],
    $row['impact'],
    $row['advice']), 1);
    }

$pdf->SetBorders(array('T', 'T', 'T', 'T', 'T'));
$pdf->Row(array('','','','',''), 1, false, 1);

$pdf->OutPut();
?>

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Ваш переключатель (TRUE) должен использовать поле с высотой возможно что-то вроде кода ниже:

switch ($row['ssh'] ) { 
case '2-3Meters' : {
   $pdf->SetFillColor(204, 153, 0); 
   $pdf->Cell($row['ssh'], 1, 1, 'L', TRUE); 
   break; 
}
case '1-2Meters' : {
    $pdf->SetFillColor(255, 255, 0); 
    $pdf->Cell($row['ssh'], 1, 1, 'L', TRUE); 
    break; 
}
case  '<1Meter' : {
    $pdf->SetFillColor(51, 153, 255); 
    $pdf->Cell($row['ssh'], 1, 1, 'L', TRUE); 
    break; 
}
default:
...
0 голосов
/ 18 марта 2019

В любом случае, не зная, как работает API FPDF, кажется, что он просто сохраняет глобальные состояния.

Итак, сначала вызовите switch + colorization (карта массива была бы проще), затем добавьте -> Cell и, наконец, -> Row, как в:

while($row = mysql_fetch_array($records)){

    switch ($row['ssh']) { 
        case '2-3Meters' : 
        $pdf->SetFillColor(204, 153, 0); 
        …
    }

    $pdf->Cell($row['ssh'], 1, 1, 'L', TRUE);

    $pdf->Row(array(1,2,3,4,1));
}
...