티스토리 뷰

반응형

PHP에서 마지막 요소에 <br>을 넣지 않는 방법

PHP에서 foreach 문을 사용할 때, 각 요소를 HTML로 출력하면서 <br> 태그를 추가해야 하는 경우가 있다. 하지만 마지막 요소에는 <br>을 넣고 싶지 않을 때 어떻게 해야 할까? 초보자들이 자주 부딪히는 문제 중 하나인데, 이를 해결하는 방법을 차근차근 설명해 보겠다.

foreach 사용 시 <br> 태그 처리 문제

예를 들어, 아래와 같은 코드가 있다고 하자.

foreach ($gridData as $gridRow) {
    $prod_CD .= $gridRow['work_prod_cd'] . "<br>";
}

이렇게 하면 모든 요소 뒤에 <br> 태그가 붙어 마지막 요소에도 <br>이 추가된다. 결과적으로 HTML에서 불필요한 빈 줄이 생길 수 있다.

implode()를 활용한 간단한 해결법

이 문제를 해결하는 가장 간단한 방법은 implode() 함수를 활용하는 것이다. implode()는 배열의 요소를 특정 문자열로 연결할 때 유용하다.

$prod_CD = implode("<br>", array_column($gridData, 'work_prod_cd'));

이 방법을 사용하면, gridData 배열에 있는 모든 work_prod_cd 값을 <br>로 연결하되, 마지막 요소에는 <br>이 추가되지 않는다. 매우 깔끔하고 직관적인 방법이다.

foreach 문에서 마지막 요소 확인하는 방법

만약 implode()를 사용하기 어렵거나, foreach 루프 내에서 추가적인 작업이 필요하다면 array_key_last()를 활용하는 방법이 있다.

foreach ($gridData as $index => $gridRow) {
    if ($index !== array_key_last($gridData)) {
        $prod_CD .= $gridRow['work_prod_cd'] . "<br>";
    } else {
        $prod_CD .= $gridRow['work_prod_cd'];
    }
}

코드 설명

  1. array_key_last($gridData)를 사용하여 마지막 키를 가져온다.
  2. 현재 $index 값과 비교하여 마지막 요소가 아니면 <br>을 추가한다.
  3. 마지막 요소라면 <br> 없이 데이터를 추가한다.

이 방식은 PHP 7.3 이상에서 사용 가능하며, 가독성이 좋은 편이다.

end() 함수 활용하기

PHP 7.2 이하에서는 end() 함수를 사용하여 배열의 마지막 요소를 찾을 수도 있다.

$lastElement = end($gridData);
foreach ($gridData as $gridRow) {
    $prod_CD .= $gridRow['work_prod_cd'];
    if ($gridRow !== $lastElement) {
        $prod_CD .= "<br>";
    }
}

코드 설명

  1. end($gridData)로 마지막 요소를 찾는다.
  2. foreach를 돌면서 현재 요소가 마지막 요소가 아니면 <br>을 추가한다.

이 방법은 PHP 5.3부터 사용할 수 있지만, 배열이 크면 end()가 성능에 영향을 줄 수 있다. 따라서 성능을 고려한다면 array_key_last()가 더 적절하다.

추가적인 최적화 방법

데이터를 문자열로 조합할 때 성능 최적화가 필요하다면, implode()를 기본으로 사용하고 foreach는 가급적 피하는 것이 좋다. 하지만 foreach를 꼭 사용해야 하는 경우라면 array_key_last()를 활용하는 것이 가장 효율적인 방법이다.

PHP에서 마지막 요소를 구분하는 방법은 여러 가지가 있지만, 가장 좋은 방법은 상황에 따라 적절한 함수를 선택하는 것이다. 위의 방법들을 잘 활용하면, 불필요한 <br> 태그로 인한 문제를 손쉽게 해결할 수 있을 것이다.

php 7.3이하일때는 다르게 해야한다.

PHP 7.3 미만 버전에서는 내장 함수인 array_key_last()가 지원되지 않으므로, 두 가지 방법으로 문제를 해결할 수 있습니다.


방법 1: Polyfill 함수 추가하기

프로젝트 상단이나 적절한 위치에 array_key_last() 함수가 정의되어 있지 않은 경우에 대비한 polyfill(대체 함수)를 추가합니다. 이렇게 하면 PHP 7.3 이상에서는 내장 함수를 사용하고, 그 이하 버전에서는 아래 정의된 함수를 사용하게 됩니다.

if (!function_exists('array_key_last')) {
    function array_key_last(array $array) {
        if (!empty($array)) {
            return array_keys($array)[count($array) - 1];
        }
        return null;
    }
}

이후 기존 코드를 그대로 사용하시면 됩니다.

foreach ($gridData as $index => $gridRow) {
    // 마지막 요소가 아닐 때만 <br> 추가
    if ($index !== array_key_last($gridData)) {
        $prod_CD .= "<br>" . $gridRow['work_prod_cd'];
        $prod_des .= $gridRow['work_prod_des'] . "<br>";
        $size_des .= $gridRow['work_size_des'] . "<br>";
    } else {
        $prod_CD .= $gridRow['work_prod_cd'];
        $prod_des .= $gridRow['work_prod_des'];
        $size_des .= $gridRow['work_size_des'];
    }   
    
    $supply_amt = isset($gridRow['work_supply_amt']) ? $gridRow['work_supply_amt'] : 0;
    // 금액 계산
    $amount += floatval(str_replace(",", "", str_replace("|", "", $supply_amt))) * 1.1;
}

방법 2: 마지막 키를 미리 구하기

array_key_last() 대신에 array_keys()와 count()를 이용하여 마지막 키를 미리 구한 후, foreach 문 내에서 비교할 수도 있습니다.

// $gridData 배열의 마지막 키를 미리 구합니다.
$keys = array_keys($gridData);
$lastKey = $keys[count($keys) - 1];

foreach ($gridData as $index => $gridRow) {
    // 마지막 요소가 아닐 때만 <br> 추가
    if ($index !== $lastKey) {
        $prod_CD .= "<br>" . $gridRow['work_prod_cd'];
        $prod_des .= $gridRow['work_prod_des'] . "<br>";
        $size_des .= $gridRow['work_size_des'] . "<br>";
    } else {
        $prod_CD .= $gridRow['work_prod_cd'];
        $prod_des .= $gridRow['work_prod_des'];
        $size_des .= $gridRow['work_size_des'];
    }
    
    $supply_amt = isset($gridRow['work_supply_amt']) ? $gridRow['work_supply_amt'] : 0;
    // 금액 계산
    $amount += floatval(str_replace(",", "", str_replace("|", "", $supply_amt))) * 1.1;
}

두 방법 중 하나를 선택하여 사용하면 PHP 7.3 미만 환경에서도 문제없이 코드를 실행할 수 있습니다.

 

 

반응형
댓글