0

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

$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.

我应该再次使用爆炸吗?它有任何意义,还是有其他方法?我想寻求提示或帮助。

4

5 回答 5

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会导致数组只有一个项目(最后一项)。可能有充分的理由采取另一种方法。

于 2012-07-13T11:01:06.253 回答
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;
}
于 2012-07-13T11:01:05.787 回答
1

是的,您应该像这样使用爆炸两次

$newData = array();
$pairs = explode('|',$data);
foreach($pairs as $pair){
   $tmp = explode(':',$pair);
   $newData[$tmp[0]] = $tmp[1];
}
于 2012-07-13T11:02:27.127 回答
0

尝试使用正则表达式:

$data = preg_split ("\||:", $data);
于 2012-07-13T11:03:21.757 回答
0

一行版本:

$data = array_map(function($d) { return (int)explode(":", $d)[1]; }, explode("|", $data));
于 2012-07-13T11:05:49.843 回答