如何拆分由管道分隔的字符串


How to split the string which is separted by a pipe

>我有一个包含许多记录的字符串,我想在 || 之后拆分每条记录,并且每条记录再次用 ~ 符号分隔。当我尝试这些时,我得到的是唯一的第一条记录而不是所有记录。你能帮我解决这个问题吗

$data="promo~919441188673,9959045~2015-03-16~4:39 pm~ arey sollu shobhan gaa neeku pani ledaaa~Invalid Number||promo~919959095474~2015-03-16~4:40 pm~ Hi ra...how are you......~Message Sent||promo~919441188673~2015-03-13~3:51 pm~ Hi,This is from bhash sms ,and this is testing sorry for the ~Delivered";
list($someCode)=explode('||', $data);
//var_dump($data);
//var_dump($someCode);

    list($type,$num,$date,$time,$msg,$status)=explode('~', $someCode);
var_dump($type);
var_dump($num);
var_dump($date);
var_dump($time);
var_dump($msg);
var_dump($status);

这应该适合您:

(在这里,我浏览了每条记录,其中包含explode()得到的array_map()。在此之后,我返回一个带有 array_combine() ) 的组合数组

<?php
    $data = "promo~919441188673,9959045~2015-03-16~4:39 pm~ arey sollu shobhan gaa neeku pani ledaaa~Invalid Number||promo~919959095474~2015-03-16~4:40 pm~ Hi ra...how are you......~Message Sent||promo~919441188673~2015-03-13~3:51 pm~ Hi,This is from bhash sms ,and this is testing sorry for the ~Delivered";
    $someCode = array_map(function($v){
        return array_combine(["type", "num", "date", "time", "msg", "status"], explode("~", $v));
    }, explode('||', $data));
    print_r($someCode);
?>

输出:

Array
(
    [0] => Array
        (
            [type] => promo
            [num] => 919441188673,9959045
            [date] => 2015-03-16
            [time] => 4:39 pm
            [msg] =>  arey sollu shobhan gaa neeku pani ledaaa
            [status] => Invalid Number
        )
    [1] => Array
        (
            [type] => promo
            [num] => 919959095474
            [date] => 2015-03-16
            [time] => 4:40 pm
            [msg] =>  Hi ra...how are you......
            [status] => Message Sent
        )
    [2] => Array
        (
            [type] => promo
            [num] => 919441188673
            [date] => 2015-03-13
            [time] => 3:51 pm
            [msg] =>  Hi,This is from bhash sms ,and this is testing sorry for the 
            [status] => Delivered
        )
)

在第一次explode之后,你会得到一个数组,而不是一个字符串,所以你需要迭代它并分解它的值:

list($someCode)=explode('||', $data);
foreach($someCode as $v){
    list($type,$num,$date,$time,$msg,$status)=explode('~', $v);
    var_dump($type);
    var_dump($num);
    var_dump($date);
    var_dump($time);
    var_dump($msg);
    var_dump($status)
}

使用爆炸函数,您可以获得您想要的东西。 使用爆炸方式

$pizza  = "piece1||piece2||piece3||piece4||piece5||piece6";
$pieces = explode("||", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2