PHP의 배열에서 쉼표로 구분 된 목록을 어떻게 생성합니까?


113

foreach를 사용하여 배열의 항목을 반복하고 쉼표를 추가하는 방법을 알고 있지만 항상 마지막 쉼표를 제거해야하는 고통이 있습니다. 쉬운 PHP 방법이 있습니까?

$fruit = array('apple', 'banana', 'pear', 'grape');

궁극적으로 나는 원한다

$result = "apple, banana, pear, grape"

답변:


231

이를 위해 implode 를 사용하고 싶습니다 .

즉 : $commaList = implode(', ', $fruit);


후행없이 쉼표를 추가하는 방법이 있습니다. 동시에 다른 조작을해야하는 경우이 작업을 수행하고 싶을 것입니다. 예를 들어 각 과일을 인용 한 다음 모두 쉼표로 구분할 수 있습니다.

$prefix = $fruitList = '';
foreach ($fruits as $fruit)
{
    $fruitList .= $prefix . '"' . $fruit . '"';
    $prefix = ', ';
}

또한 각 항목 뒤에 쉼표를 추가하는 "일반적인"방법 (이전에했던 것처럼 들림)을 수행하고 마지막 항목을 잘라 내야한다면 $list = rtrim($list, ', '). substr이런 상황에서 많은 사람들이 불필요하게 주위를 비웃는 것을 봅니다 .


4
(따옴표를 추가하려는 경우) <code> $ fruitlist = ' "'. implode ( '", "', $ fruit). '"'; </ code>
cwallenpoole

배열의 데이터를 문자열로 만들기 전에 조작하려는 경우 foreach 루프가 더 좋습니다. 예를 들어, addlashes 또는 mysql_real_escape_string.
Naphtali Gilead

39

이것이 내가해온 방법입니다.

$arr = array(1,2,3,4,5,6,7,8,9);

$string = rtrim(implode(',', $arr), ',');

echo $string;

산출:

1,2,3,4,5,6,7,8,9

라이브 데모 : http://ideone.com/EWK1XR

편집 : @joseantgv의 의견에 rtrim()따라 위의 예에서 제거 할 수 있어야합니다 . 즉 :

$string = implode(',', $arr);

5
위의 대답으로, 당신은 단지 내파 ( '', $ 편곡) 할 수
joseantgv

@joseantgv 당신 말이 맞아요, 제가 왜를 사용하는지 모르겠어요 rtrim(). 문자열 끝에 추가 쉼표가있는 문제가 있었지만 그 상황은 기억 나지 않습니다.
Nate

6

and결국 결과 :

$titleString = array('apple', 'banana', 'pear', 'grape');
$totalTitles = count($titleString);
if ($totalTitles>1) {
    $titleString = implode(', ', array_slice($titleString, 0, $totalTitles-1)) . ' and ' . end($titleString);
} else {
    $titleString = implode(', ', $titleString);
}

echo $titleString; // apple, banana, pear and grape

3

Lloyd의 답변과 비슷하지만 모든 크기 배열에서 작동합니다.

$missing = array();
$missing[] = 'name';
$missing[] = 'zipcode';
$missing[] = 'phone';

if( is_array($missing) && count($missing) > 0 )
        {
            $result = '';
            $total = count($missing) - 1;
            for($i = 0; $i <= $total; $i++)
            { 
              if($i == $total && $total > 0)
                   $result .= "and ";

              $result .= $missing[$i];

              if($i < $total)
                $result .= ", ";
            }

            echo 'You need to provide your '.$result.'.';
            // Echos "You need to provide your name, zipcode, and phone."
        }

3

현재 반복이 배열의 마지막 값이 아닌지 확인하는 IF 문을 FOR 루프에 사용하는 것을 선호합니다. 그렇지 않은 경우 쉼표를 추가하십시오.

$fruit = array("apple", "banana", "pear", "grape");

for($i = 0; $i < count($fruit); $i++){
    echo "$fruit[$i]";
    if($i < (count($fruit) -1)){
      echo ", ";
    }
}

2
총 개수가 4 개와 다른 경우?
Jyothish

1

때로는 특정 인스턴스에서이를 위해 PHP가 필요하지도 않습니다 (예를 들어 목록 항목은 렌더링시 고유 한 일반 태그에 있음). 렌더링 된 후 별도의 요소 인 경우 CSS를 통해 모든 요소에 항상 쉼표를 추가 할 수 있지만 마지막 하위 요소는 추가 할 수 있습니다. 스크립트에서.

실제로 백본 앱에서 이것을 많이 사용하여 임의의 코드 지방을 잘라냅니다.

.likers a:not(:last-child):after { content: ","; }

기본적으로 요소를보고 마지막 요소를 제외한 모든 항목을 대상으로하며 각 항목 뒤에 쉼표를 추가합니다. 케이스가 적용되는 경우 스크립트를 전혀 사용하지 않아도되는 대체 방법입니다.



0

기능적 솔루션은 다음과 같습니다.

$fruit = array('apple', 'banana', 'pear', 'grape');
$sep = ','; 

array_reduce(
    $fruits,
    function($fruitsStr, $fruit) use ($sep) {
        return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
    },
    ''
);

0

이걸 따라

$teacher_id = '';

        for ($i = 0; $i < count($data['teacher_id']); $i++) {

            $teacher_id .= $data['teacher_id'][$i].',';

        }
        $teacher_id = rtrim($teacher_id, ',');
        echo $teacher_id; exit;

-1

인용 된 답변을하면 할 수 있습니다.

$commaList = '"'.implode( '" , " ', $fruit). '"';

위의 내용은 과일이 null이 아니라고 가정합니다. 그러한 가정을하고 싶지 않다면 if-then-else 문이나 삼항 (? :) 연산자를 사용할 수 있습니다.


-2

다른 방법은 다음과 같습니다.

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

의 출력은 $result멋지게 형식이 지정된 쉼표로 구분 된 목록입니다.

a, b, c, d, e, f, g

-2
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values
$result = substr(implode(", ", $letters), 0);
echo $result

출력-> a, b, c, d, e, f, g

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.