2013-04-23 6 views
0

아래의 PHP 코드는 .csv 파일에서 데이터를 추출하고 HTML 표를 생성합니다. 그것은 잘 작동합니다. csv 파일의 일부 특정 단어 (예 : 빨간색, 녹색)에 대응하여 빨간색 또는 녹색 점 (reddot.gif, greendot.gif)과 같은 일부 아이콘을 html 표에 포함시킬 수 있는지 궁금합니다.csv에서 가져온 HTML 표 안에 아이콘을 포함시키는 방법은 무엇입니까?

즉, csv 파일에서 특정 열 (예 : 열 3)에 빨간색 또는 녹색으로 표시되면 생성 된 html 파일에 reddot.gif 또는 greendot.gif가 나타나야합니다.

미리 감사드립니다. 매트

<?php 
$row = 1; 
if (($handle = fopen("example.csv", "r")) !== FALSE) { 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    if ($row == 1) { 
     echo '<tr>'; 
    }else{ 
     echo '<tr>'; 
    } 

    for ($c=0; $c < $num; $c++) { 

     if(empty($data[$c])) { 
      $value = "&nbsp;"; 
     }else{ 
      $value = $data[$c]; 
     } 
     if ($row == 1) { 
// ------------- head row -------- 
      echo '<td style="border-top: 1px solid rgb(111,180,224); border-left: 1px solid rgb(111,180,224); border-bottom: 1px solid rgb(111,180,224);" align="left" bgcolor="#0066cc" height="36" valign="middle" ><b><font color="#ffffff" size="2">&nbsp;&nbsp;'.$value.'&nbsp;&nbsp;</font></b></td>'; 
     }else{ 

// ------------- Generic row ------- 
      echo '<td style=" border-bottom: 1px solid rgb(111,180,224);" sdval="9" sdnum="1040;" align="left" bgcolor="#ffffff" height="25" valign="middle"><font color="#000000" size="2">&nbsp;&nbsp;'.$value.'&nbsp;&nbsp;</font></td>'; 
     } 
    } 

    if ($row == 1) { 
     echo '</tr>'; 
    }else{ 
     echo '</tr>'; 
    } 
    $row++; 
} 

echo '</tbody></table>'; 
echo '</center>'; 
fclose($handle); 
} 
?> 

답변

2

선언 단지의 시작 경우, 또는 시작 부분이나 스크립트의 끝에서 어떤 루프의 외부에서이 기능 는 :

function img($img){ return "<img src='{$img}dot.gif'/>";} 

이것은 다른 사람에 간다 :

$value = preg_replace(array('/red/i', '/green/i'), array(img('red'), img('green')), $data[$c]); 

당신은 더 많은 색상 그냥 논리를 따르고에 추가해야하는 경우 preg_replace의 내부에있는 두 개의 배열.

이미지에 속성을 추가해야하는 경우 선언 된 함수에 속성을 추가하십시오.

그 필드 만 색상 단어를 포함 할 경우

+0

좋아, 잘 됐어! 그러나 "녹색"또는 "빨간색"이라는 단어가 일반 텍스트의 일부인 경우 단어 뒤에 img가 표시됩니다 :/ – mattew

+0

그러면 원하는 열에만 코드를 적용해야합니다. for 루프 안에있는 3 열이라고 말할 수 있습니다 : if ($ c == 2) {이미지 코드 대신 값 바꾸기} – aleation

0

이 기능을 사용해보십시오.

if(empty($data[$c])) { 
     $value = "&nbsp;"; 
    }else{ 
     $value = $data[$c]; 
     switch(strtolower(trim($value))){ 
     case 'green': $value = '<img src="greendot.gif" ' 
          .'alt="green" height="32" width="32">'; 
          break; 
     case 'red': $value = '<img src="reddot.gif" ' 
          .'alt="red" height="32" width="32">'; 
          break; 
     // you can add other cases here like blue, triangle etc :) 
     } 
    } 
+0

영업 이익은 지정하지 않았의 쉼표로 구분 된 값은 보통 공백와 함께 제공으로, 당신은, 최소한의 $ 값을 손질해야 작동 희망 . 그리고 다른 단어와 섞인 단어 인 경우 대신 REGEX를 사용해야합니다. – aleation

+0

@aleation 지나치게 복잡 해지는 것은 어떨까요? 그런 다음 파서를 추가 할 수 있습니다;) ... 어쨌든 csv의 선행 및 후행 공백은 일반적입니다. 여기에 제시된 데이터로 OP 측을 알 수 없으므로 여기서 제시 한 대답은 정확하지도 정확하지 않습니다. . 즉 : 이미지에 대한 경로는 생략되며 크기는 임의적입니다. 여기서 동기는 패턴을 보여주는 것입니다 ... 관심을 가져 주셔서 감사합니다. – Ihsan

+0

실제로 작동하지 않습니다. 열을 지정하지 않는 아이디어는 나쁘지 않으므로 코드를 수정하지 않고 아이콘이있는 열을 두 개 이상 자유롭게 사용할 수 있습니다. 그러나이 코드를 시도하고 나에게 희망 결과를 제공하지 않았습니다./ – mattew

관련 문제