如何在我的案例中使用爆炸?

时间:2012-07-13 10:58:33

标签: php

根据以下示例,我有一个包含值的文本的变量:

$data = "5:7|4:1|504:2|1:3|"

我希望得到这样的结果:

$data[5] = 7;
$data[4] = 1;
$data[504] = 2;
$data[1] = 3;

我尝试爆炸:

$data = explode("|", $data);

//but it makes $data[0]="5:7"; $data[1]="4:1"; and so on.

我应该再次使用爆炸吗?它有任何意义,还是有另一种方式?我想请一个提示或帮助。

5 个答案:

答案 0 :(得分:4)

可能有一种更聪明的方式,但我会这样做:

$data = array();
foreach (explode("|", $your_data) as $part)
{
    $pieces = explode(':', $part);
    // Assumes we have 2 pieces, might want to make sure here...

    $data[$pieces[0]] = $pieces[1];
}

另外,我不确定这些数据代表什么,但请记住,数组键会相互覆盖,因此1:1|1:2将导致只有一个项目(最后一个)的数组。可能有充分的理由采取另一种方法。

答案 1 :(得分:1)

当然,再次explode

$data = "5:7|4:1|504:2|1:3";
$array = array();
foreach (explode('|', $data) as $pair) {
    list($id, $val) = explode(':', $pair);
    $array[$id] = $val;
}

答案 2 :(得分:1)

是的,你应该使用爆炸两次,比如这个

$newData = array();
$pairs = explode('|',$data);
foreach($pairs as $pair){
   $tmp = explode(':',$pair);
   $newData[$tmp[0]] = $tmp[1];
}

答案 3 :(得分:0)

尝试使用正则表达式:

$data = preg_split ("\||:", $data);

答案 4 :(得分:0)

一行版本:

$data = array_map(function($d) { return (int)explode(":", $d)[1]; }, explode("|", $data));