PHP에서 쉼표로 구분 된 문자열을 배열로 어떻게 분할 할 수 있습니까?


263

문자열 입력을 쉼표로 배열로 분할해야합니다.

이것을 달성하려면 어떻게해야합니까?

입력:

9,admin@example.com,8

8
참고로, 사람들은 정보의 양이 적고 질문이 잘못되어 사용자를 거부하고 있습니다.
Troggy

@Troggy-편집하는 동안 읽기 쉬운 영어로 변경하기로 결정했지만 다른 질문과 중복 될 수 있음을 깨달았습니다.
John Rasch

3
너무 기본적인 질문은 없지만 문자열 처리기 함수를 살펴볼 수도 있습니다. 나쁜 질문이 아니기 때문에 문서에서 무언가를 찾는 것이 좋고 때로는 더 빠릅니다.
Csaba Kétszeri

답변:


553

폭발 시도 :

$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
print_r($myArray);

출력 :

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)

1
당신은 어떻게 카운트를 얻을 수 있습니까? . 길이?
대인 수수

2
- 한 가지 방법은 수 () (일명를 sizeof)를 사용하는 것입니다 php.net/manual/en/function.count.php
마 로브

2
@McLosysCreative 또한 var_dump더 자세한 정보를 제공 할 수도 있습니다 . 더욱 유용한 것은 생성 된 사이트를 중단하지 않고 로그로 저장할 수 있도록 문자열 var_export($myArray, true)의 출력을 리턴하기 때문 var_dump입니다.
Tomasz Kapłoński

58
$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

산출

9
admin@example.com
8

1
마지막 루프는 질문과 직접 ​​관련이 없지만 내 문제와 관련이 있습니다. 감사합니다!
Jesse Steele

34
$string = '9,admin@google.com,8';
$array = explode(',', $string);

더 복잡한 상황에서는을 사용해야 할 수도 있습니다 preg_split.


30

해당 문자열이 csv 파일에서 나온 경우 사용합니다 fgetcsv()(또는 str_getcsv()PHP V5.3이있는 경우). 이렇게하면 인용 된 값을 올바르게 구문 분석 할 수 있습니다. csv가 아닌 경우 explode()최선의 선택이되어야합니다.


2

암호:

$string = "9,admin@example.com,8";

$array  = explode(",", $string);

print_r($array);

$no = 1;
foreach ($array as $line) {
    echo $no . ". " . $line . PHP_EOL;
    $no++;
};

온라인 :

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/pGEAlb" ></iframe>


0

간단한 방법으로 당신은 함께 갈 수 있습니다 explode($delimiter, $string);

그러나 수동 프로그래밍으로 광범위한 방법으로 :

        $string = "ab,cdefg,xyx,ht623";
        $resultArr = [];
        $strLength = strlen($string);
        $delimiter = ',';
        $j = 0;
        $tmp = '';
        for ($i = 0; $i < $strLength; $i++) {
            if($delimiter === $string[$i]) {
                $j++;
                $tmp = '';
                continue;
            }
            $tmp .= $string[$i];
            $resultArr[$j] = $tmp;
        }

Outpou : print_r($resultArr);

Array
(
    [0] => ab
    [1] => cdefg
    [2] => xyx
    [3] => ht623
)

0

최선의 선택은 "explode ()"함수를 사용하는 것입니다.

$content = "dad,fger,fgferf,fewf";
$delimiters =",";
$explodes = explode($delimiters, $content);

foreach($exploade as $explode) {
    echo "This is a exploded String: ". $explode;
}

더 빠른 접근 방식을 원하면 Delimiters.co 와 같은 구분 기호 도구를 사용할 수 있습니다 . 이와 같은 웹 사이트가 많이 있습니다. 그러나 간단한 PHP 코드를 선호합니다.


0

explode 실제 사용에 매우 큰 문제가 있습니다.

count(explode(',', null)); // 1 !! 
explode(',', null); // [""] not an empty array, but an array with one empty string!
explode(',', ""); // [""]
explode(',', "1,"); // ["1",""] ending commas are also unsupported, kinda like IE8

이것이 내가 preg_split을 선호하는 이유입니다

preg_split('@,@', $string, NULL, PREG_SPLIT_NO_EMPTY)

전체 상용구 :

/** @brief wrapper for explode
 * @param string|int|array $val string will explode. '' return []. int return string in array (1 returns ['1']). array return itself. for other types - see $as_is
 * @param bool $as_is false (default): bool/null return []. true: bool/null return itself.
 * @param string $delimiter default ','
 * @return array|mixed
 */
public static function explode($val, $as_is = false, $delimiter = ',')
{
    // using preg_split (instead of explode) because it is the best way to handle ending comma and avoid empty string converted to ['']
    return (is_string($val) || is_int($val)) ?
        preg_split('@' . preg_quote($delimiter, '@') . '@', $val, NULL, PREG_SPLIT_NO_EMPTY)
        :
        ($as_is ? $val : (is_array($val) ? $val : []));
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.