Bagaimana saya bisa membagi string yang dibatasi koma ke dalam array di PHP?

263

Saya perlu membagi input string saya menjadi array di koma.

Bagaimana saya bisa menyelesaikan ini?

Memasukkan:

9,admin@example.com,8
Kevin
sumber
8
Sekedar catatan, orang-orang menurunkan Anda karena jumlah informasi minimum dan pertanyaan dengan kata-kata buruk.
Troggy
@Troggy - selama edit saya, saya berangkat untuk mengubahnya menjadi bahasa Inggris yang dapat dibaca, tetapi kemudian saya menyadari bahwa itu mungkin akan menjadi duplikat dari banyak pertanyaan lainnya
John Rasch
3
Tidak ada pertanyaan yang terlalu mendasar, tetapi Anda mungkin mempertimbangkan untuk melihat fungsi string handler. Bukan karena itu adalah pertanyaan yang buruk tetapi menemukan sesuatu dalam dokumen terasa baik dan kadang-kadang lebih cepat.
Csaba Kétszeri

Jawaban:

553

Coba meledak :

$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
print_r($myArray);

Output:

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)
Matthew Groves
sumber
1
Bagaimana Anda bisa menghitung? lengh?
delive
2
Salah satu caranya adalah dengan menggunakan count () (alias sizeof) - php.net/manual/en/function.count.php
Matthew Groves
2
@McLosysCreative Anda mungkin juga suka var_dumpyang memberikan informasi lebih rinci. Yang lebih bermanfaat adalah var_export($myArray, true)karena mengembalikan output var_dumpsebagai string sehingga Anda dapat menyimpannya dalam beberapa log tanpa merusak situs yang dihasilkan ...
Tomasz Kapłoński
58
$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Keluaran

9
admin@example.com
8
Jakir Hossain
sumber
1
Perulangan Anda pada akhirnya tidak berhubungan langsung dengan pertanyaan, tetapi itu relevan dengan masalah saya. Terima kasih untuk ini!
Jesse Steele
30

Jika string itu berasal dari file csv, saya akan menggunakan fgetcsv()(atau str_getcsv()jika Anda memiliki PHP V5.3). Itu akan memungkinkan Anda untuk mem-parsing nilai yang dikutip dengan benar. Jika bukan csv, explode()harus menjadi pilihan terbaik.

soulmerge
sumber
2

Kode:

$string = "9,[email protected],8";

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

print_r($array);

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

On line:

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

antelove
sumber
0

Dengan cara sederhana Anda bisa ikut explode($delimiter, $string);

Namun secara luas, dengan Pemrograman Manual:

        $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
)
Gautam Rai
sumber
0

Pilihan terbaik adalah menggunakan fungsi "explode ()".

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

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

Jika Anda menginginkan pendekatan yang lebih cepat, Anda dapat menggunakan alat pembatas seperti Delimiters.co Ada banyak situs web seperti ini. Tapi saya lebih suka kode PHP sederhana.

Mark William
sumber
0

explode memiliki beberapa masalah yang sangat besar dalam penggunaan kehidupan nyata:

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

ini sebabnya saya lebih suka preg_split

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

seluruh 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 : []));
}
oriadam
sumber