How can I split a delimited string into an array in PHP?

前端 未结 10 1653
失恋的感觉
失恋的感觉 2020-11-21 11:11

I need to split my string input into an array at the commas.

How can I go about accomplishing this?

Input:

9,admin@example.com,8
相关标签:
10条回答
  • 2020-11-21 11:45

    If that string comes from a csv file, I would use fgetcsv() (or str_getcsv() if you have PHP V5.3). That will allow you to parse quoted values correctly. If it is not a csv, explode() should be the best choice.

    0 讨论(0)
  • 2020-11-21 11:46

    What if you want your parts to contain commas? Well, quote them. And then what about the quotes? Well, double them up. In other words:

    part1,"part2,with a comma and a quote "" in it",part3

    PHP provides the https://php.net/str_getcsv function to parse a string as if it were a line in a CSV file which can be used with the above line instead of explode:

    print_r(str_getcsv('part1,"part2,with a comma and a quote "" in it",part3'));
    Array
    (
        [0] => part1
        [1] => part2,with a comma and a quote " in it
        [2] => part3
    )
    
    0 讨论(0)
  • 2020-11-21 11:48

    Try explode:

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

    Output :

    Array
    (
        [0] => 9
        [1] => admin@example.com
        [2] => 8
    )
    
    0 讨论(0)
  • 2020-11-21 11:50

    Use explode() or preg_split() function to split the string in php with given delimiter

    // Use preg_split() function 
    $string = "123,456,78,000";  
    $str_arr = preg_split ("/\,/", $string);  
    print_r($str_arr); 
      
    // use of explode 
    $string = "123,46,78,000"; 
    $str_arr = explode (",", $string);  
    print_r($str_arr); 
    
    0 讨论(0)
  • 2020-11-21 11:55

    explode has some very big problems in real life usage:

    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
    

    this is why i prefer preg_split

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

    the entire boilerplate:

    /** @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 : []));
    }
    
    0 讨论(0)
  • 2020-11-21 11:58

    In simple way you can go with explode($delimiter, $string);

    But in a broad way, with Manual Programming :

            $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 讨论(0)
提交回复
热议问题