ฉันจะแยกสตริงที่คั่นด้วยจุลภาคเป็นอาร์เรย์ใน PHP ได้อย่างไร


263

ฉันต้องแยกอินพุตสตริงของฉันเป็นอาร์เรย์ที่เครื่องหมายจุลภาค

ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไร

การป้อนข้อมูล:

9,admin@example.com,8

8
เพียงทราบผู้คนกำลัง downvoting คุณเนื่องจากจำนวนข้อมูลขั้นต่ำและคำถามที่พูดไม่ดี
Troggy

@Troggy - ในระหว่างการแก้ไขของฉันฉันออกเพื่อเปลี่ยนมันชัดเจนภาษาอังกฤษ แต่แล้วฉันรู้ว่ามันอาจจะเพียงแค่จะซ้ำกับคำถามอื่น ๆ อีกมากมาย
จอห์น 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
คุณจะได้รับการนับอย่างไร .lengh?
delive

2
วิธีหนึ่งคือการใช้ count () (aka sizeof) - php.net/manual/en/function.count.php
Matthew Groves

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.