将字符串带有两组分隔符,进入关联阵列

问题描述 投票:0回答:6

I有一个变量,该变量包含以下示例的值:

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

我应该再次使用爆炸吗?它有任何意义,还是有其他方式?

php arrays associative-array string-parsing delimited
6个回答
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];
}

输出:demo

Warning: Undefined array key 1
array (
  5 => '7',
  4 => '1',
  504 => '2',
  1 => '3',
  '' => NULL,
)

,我不确定这些数据代表了什么,但请记住,数组键将相互覆盖,因此
1:1|1:2

将仅带有一个项目(最后一块)的数组。可能有充分的理由采取另一种方法。

1
投票

,再次:

explode
    

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

输出:
demo

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

                
如果您想将关联值作为字符串解析,则可以使用迭代

0
投票
调用,或将字符串转换为本地可简洁的INI格式。 demo

explode()
或值应以int类型值的形式施放,请使用

var_export( parse_ini_string( strtr($data, ':|', "=\n") ) );
。 demo

sscanf()

一个线版本:
demo

-1
投票
$result = []; foreach (explode('|', rtrim($data, '|')) as $pair) { [$k, $result[$k]] = sscanf($pair, '%d:%d'); } var_export($result);

输出:

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

trone使用REGEXP:

Warning: Undefined array key 1
array (
  0 => 7,
  1 => 1,
  2 => 2,
  3 => 3,
  4 => 0,
)

-1
投票
demo

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.