따옴표가있는 PHP implode (101)


115

간단한 배열 파열

이렇게 보일거야

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

그리고 그것은 이것을 반환합니다

 lastname,email,phone

좋아, 그래서 내가 대신 할 수도

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

이제 내가 원하는 멋진 예쁜 csv 문자열이 있습니다.

 'lastname','email','phone'

이 작업을 수행하는 더 좋은 방법이 있습니까, implode에 대한 선택적 매개 변수가 있어야하는 것처럼 느껴집니다.


11
제공된 답변에 대해 "느린"의견이 많이 있습니다. 그것은 중요하지 않습니다 . 더 명확하고 유지 관리가 쉬운 방법을 선택하고 나중에 성능에 대해 걱정하십시오.
meagar

1
유일한 단점은 배열이 비어 있으면 하나의 빈 문자열을 생성한다는 것입니다. 즉. 에 해당$comma_separated = "''";
scipilot

1
위대한 솔루션 mcgrailm ... 정말 감사
하기 Sandeep Garg를

1
@mcgrailm 감사합니다. 내 프로젝트에서 작동합니다. 정말 감사합니다.
Wafie 알리

답변:


29

아니, 당신이하는 방식은 괜찮습니다. implode()1-2 개의 매개 변수 만 사용합니다 (배열 만 제공하면 빈 문자열로 조각을 결합합니다).


모든 솔루션에 속도 차이가없는 것 같습니다. 저는 항상 그래 왔던 방식으로 계속할 것입니다. 모든 사람의 도움에 감사드립니다
mcgrailm

163
$array = array('lastname', 'email', 'phone');


echo "'" . implode("','", $array) . "'";

빠른 속도
Jeffz 2013-08-28

이 나를 위해 일을
마이키

5
이 솔루션을 사용하는 동안 빈 배열을주의하십시오.
Luigi

감사. 나는 이것을 위해 사용<ul> <li> {!! implode('</li><li>', session('messages')) !!} </li> </ul>
marlo

42

다음을 사용할 수 있습니다 array_map().

function add_quotes($str) {
    return sprintf("'%s'", $str);
}

$csv =  implode(',', array_map('add_quotes', $array));

데모

또한 fputcsv파일에 쓰려 는 경우가 있습니다.


@Felix Kling 나는 이것이 느릴 것이라고 생각합니까?
mcgrailm

1
@mcgrailm, 나는 다시 묻습니다 : 무엇보다 느리나요?
Naftali 일명 Neal

2
@mcgrailm : 아마도, 벤치 마크를 만들고 알아내는 것이 좋습니다;)
Felix Kling

@Felix Kling 어떻게해야합니까?
mcgrailm

1
이것은 배열 요소에 나타날 수있는 작은 따옴표를 이스케이프 할 수 있다는 추가 이점이 있습니다
meagar

29
$ids = sprintf("'%s'", implode("','", $ids ) );

훌륭하고 간단하며 직접적입니다.
Vinícius

23

더 빠른지 모르겠지만 방법으로 코드 줄을 저장할 수 있습니다.

에서

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

에:

$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";

그리고 나는 그것을 더 할 수 있지만 변수 $ array가 마지막 줄에있는 곳에 배열의 정의를 두지 만 속도 차이는 매우 유한 할 것입니다
mcgrailm

8

루프를 사용하려면 다음을 수행 할 수도 있습니다.

$array = array('lastname', 'email', 'phone');
foreach($array as &$value){
   $value = "'$value'";
}
$comma_separated = implode(",", $array);

데모 : http://codepad.org/O2kB4fRo


1
@mcgrailm, 무엇보다 느린가요? 그것의 기본적으로 같은 것과 array_map사용하지 않고array_map
Naftali aka Neal

내가 현재 내 csv 문자열을 만드는 방법보다 느립니다
mcgrailm

@mcgrailm 참조 @FelixKling의 코멘트
Naftali 일명 Neal

1
+1은 유일한 정답 인 것 같습니다. 다른 모든 답변은 빈 배열을 파열하려고 할 때 빈 문자열을 생성합니다. 이건 안될거야.
Denis Matafonov

감사합니다 @DenisMatafonov :-)
닐 일명 Naftali

2

또는 다음과 같은 함수를 만들 수 있습니다.

function implode_with_quotes(array $data)
{
    return sprintf("'%s'", implode("', '", $data));
}

1

fopen / fputcsv 하위 시스템을 피하려면 여기에 연관 배열에서 이스케이프 된 CSV 문자열을 빌드하는 스 니펫이 있습니다 ....

$output = '';
foreach ($list as $row) {
  $output .= '"' . implode('", "', array_values($row)) . '"' . "\r\n";
}

또는 개체 목록에서 ...

foreach ($list as $obj) {
  $output .= '"' . implode('", "', array_values((array) $obj)) . '"' . "\r\n";
}

그런 다음 원하는대로 문자열을 출력 할 수 있습니다.


0

이 방법으로도 할 수 있습니다

<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>

2
join은 implode의 별칭입니다
mcgrailm

0

나는 이것이 당신이하려는 일이라고 생각합니다

$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", explode(',', $array)) . "'";

0

필요한 배열에 따라 다음과 같은 또 다른 옵션이 있습니다.

$array = array('lastname', 'email', 'phone');
echo json_encode($array);

이것은 당신이 원할 수도 있고 원하지 않을 수도있는 문자열 주위에 '['와 ']'를 넣을 것입니다.

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