Làm cách nào tôi có thể chia một chuỗi được phân cách bằng dấu phẩy thành một mảng trong PHP?


263

Tôi cần chia chuỗi đầu vào của mình thành một mảng tại dấu phẩy.

Làm thế nào tôi có thể hoàn thành việc này?

Đầu vào:

9,admin@example.com,8

8
Chỉ cần một lưu ý, mọi người đang hạ thấp bạn vì lượng thông tin tối thiểu và câu hỏi kém.
Troggy

@Troggy - trong quá trình chỉnh sửa của mình, tôi đã bắt đầu thay đổi nó sang tiếng Anh dễ đọc, nhưng sau đó tôi nhận ra nó có thể chỉ là một bản sao của nhiều câu hỏi khác
John Rasch

3
Không có câu hỏi nào là quá cơ bản, nhưng bạn có thể xem xét để xem xét các hàm xử lý chuỗi. Không phải vì đó là câu hỏi tồi mà việc tìm kiếm thứ gì đó trong tài liệu cảm thấy tốt và đôi khi nhanh hơn.
Csaba Kétszeri

Câu trả lời:


553

Hãy thử phát nổ :

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

Đầu ra:

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

1
Làm thế nào bạn có thể có được đếm? .lengh?
delive

2
Một cách là sử dụng Count () (còn gọi là sizeof) - php.net/manual/en/feft.count.php
Matthew Groves

2
@McLosysCreative Bạn cũng có thể thích var_dumpcung cấp thông tin chi tiết hơn. Thậm chí hữu ích hơn nữa là var_export($myArray, true)vì nó trả về đầu ra var_dumpdưới dạng một chuỗi để bạn có thể lưu trữ nó trong một số nhật ký mà không phá vỡ trang web được tạo ...
Tomasz Kapłoński

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

Đầu ra

9
admin@example.com
8

1
Vòng lặp của bạn ở cuối không liên quan trực tiếp đến câu hỏi, nhưng nó có liên quan đến vấn đề của tôi. Cảm ơn vì điều đó!
Jesse Steele

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

Đối với các tình huống phức tạp hơn, bạn có thể cần phải sử dụng preg_split.


30

Nếu chuỗi đó đến từ tệp csv, tôi sẽ sử dụng fgetcsv()(hoặc str_getcsv()nếu bạn có PHP V5.3). Điều đó sẽ cho phép bạn phân tích các giá trị được trích dẫn một cách chính xác. Nếu nó không phải là một csv, explode()nên là sự lựa chọn tốt nhất.


2

Mã số:

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

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

print_r($array);

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

Trực tuyến:

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


0

Theo cách đơn giản, bạn có thể đi với explode($delimiter, $string);

Nhưng theo một cách rộng rãi, với Lập trình thủ công:

        $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

Lựa chọn tốt nhất là sử dụng hàm "explode ()".

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

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

Nếu bạn muốn tiếp cận nhanh hơn, bạn có thể sử dụng một công cụ phân cách như Delimiter.co Có rất nhiều trang web như thế này. Nhưng tôi thích một mã PHP đơn giản.


0

explode có một số vấn đề rất lớn trong việc sử dụng thực tế:

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

đây là lý do tại sao tôi thích preg_split

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

toàn bộ nồi hơi:

/** @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 : []));
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.