0

我怎么能爆炸这个?mars@email.com,123,12,1|art@hur.com,321,32,2

输出应该是:

$email = mars@email.com
$score = 123
$street = 12
$rank = 1

然后删除|

$email = art@hur.com
$score = 321
$street = 32
$rank = 2


$string = mars@email.com,123,12,1|art@hur.com,321,32,2
explode( ',', $string );

那是对的吗?

4

7 回答 7

2
 foreach(explode('|', $str) as $v){
     $data = explode(',',$v);
     echo '$email = '.$data[0].
     '$score = '.$data[1].
     '$street = '.$data[2].
     '$rank = '.$data[3];
 }
于 2012-07-15T17:34:53.510 回答
1

您可能想要使用 strtok() 而不是 explode()。

http://www.php.net/manual/en/function.strtok.php

于 2012-07-15T17:34:15.463 回答
1
$arr = preg_split( '"[,|]"', 'mars@email.com,123,12,1|art@hur.com,321,32,2' );
$len = count($arr);
for( $i = 0; $i < $len; $i+=4 ) {
    $email = $arr[$i];
    $score = $arr[$i+1];
    $street = $arr[$i+2];
    $rank = $arr[$i+3];
}
于 2012-07-15T17:40:40.813 回答
0

我想你想要的是这样的

   $output = array();

foreach (explode('|', $string) as $person) {
    $output[] = array(
        'email'   =>    $person[0],
        'score'   =>    $person[1],
        'street'  =>    $person[2],
        'rank'    =>    $person[3]
    )
}

这会将所有结果存储在一个多维数组中。例如,要打印人员 1 的电子邮件,您可以使用

echo $output[0]['email'];   // mars@email.com

并访问人 2 的街道,你会使用

echo $output[1]['street'];   // 32
于 2012-07-15T17:49:48.400 回答
0

您需要将新数组存储在变量中 >

$arr = explode(',',$string);

我没有得到你想要对第二部分做的事情(在 之后|),但你可以通过这样做获得第一个标准 >$half = explode('|',$string)[0];

于 2012-07-15T17:34:25.390 回答
0

你需要以正确的顺序解开它:

  • 首先是由分隔的块|

  • 然后各个单元格由,

一个简洁的方法是:

$array = array_map("str_getcsv", explode("|", $data));

会给你一个二维数组。

于 2012-07-15T17:35:51.910 回答
0

使用 strtok 和爆炸。

$tok = strtok($string, "|");

while ($tok !== false) {
    list($email, $score, $street, $rank) = explode(',', $tok);
    $tok = strtok(",");
}
于 2012-07-15T17:36:42.813 回答