Virgülle ayrılmış bir dizeyi PHP'deki bir diziye nasıl bölebilirim?


263

Virgül bir diziye benim dize girişi bölmek gerekiyor.

Bunu nasıl başarabilirim?

Giriş:

9,admin@example.com,8

8
Sadece bir not, asgari bilgi miktarı ve kötü ifade edilen soru nedeniyle insanlar sizi aşağılıyor.
Troggy

@Troggy - düzenlemem sırasında onu okunaklı İngilizce olarak değiştirmek için yola koyuldum, ancak daha sonra muhtemelen diğer birçok sorunun kopyası olacağını fark ettim
John Rasch

3
Hiçbir soru çok temel değildir, ancak dize işleyici işlevlerine bakmayı düşünebilirsiniz. Kötü bir soru olduğu için değil, dokümanlar içinde bir şeyler bulmak iyi ve bazen daha hızlı geliyor.
Csaba Kétszeri

Yanıtlar:


553

Patlamayı deneyin :

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

Çıktı :

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

1
Nasıl sayılır? .lengh?
Delive

2
Bunun bir yolu count () (aka sizeof) kullanmaktır - php.net/manual/tr/function.count.php
Matthew Groves

2
@McLosysCreative Hangisinin var_dumpdaha ayrıntılı bilgi verdiğini de beğenebilirsiniz . Daha da yararlı olanı , bir dizeyi var_export($myArray, true)çıktı var_dumpolarak döndürdüğü için, oluşturulan siteyi bozmadan bazı günlüklerde saklayabilirsiniz ...
Tomasz Kapłoński

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

Çıktı

9
admin@example.com
8

1
Sondaki döngünüz doğrudan soruyla ilgili değildi, ancak sorunumla ilgiliydi. Bunun için teşekkürler!
Jesse Steele

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

Daha karmaşık durumlar için kullanmanız gerekebilir preg_split.


30

Bu dize bir csv dosyasından geliyorsa, ben fgetcsv()(veya str_getcsv()PHP V5.3 varsa) kullanırdım. Bu, belirtilen değerleri doğru şekilde ayrıştırmanıza olanak tanır. Bir csv değilse explode(), en iyi seçim olmalıdır.


2

Kod:

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

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

print_r($array);

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

İnternet üzerinden:

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


0

Basit bir şekilde gidebilirsiniz explode($delimiter, $string);

Ancak, Manuel Programlama ile geniş bir şekilde:

        $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;
        }

Çıktı: print_r($resultArr);

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

0

En iyi seçim "explode ()" fonksiyonunu kullanmaktır.

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

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

Daha hızlı bir yaklaşım istiyorsanız Delimiters.com gibi bir sınırlayıcı araç kullanabilirsiniz . Bunun gibi birçok web sitesi vardır. Ama basit bir PHP kodunu tercih ederim.


0

explode gerçek hayat kullanımında bazı çok büyük sorunları var:

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

bu yüzden preg_split tercih ederim

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

tüm kazan plakası:

/** @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 : []));
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.