将字符串分解为具有2个分隔符的多数组

时间:2014-09-10 15:26:34

标签: php multidimensional-array

我在php中有这种sting变量:

 $hccRol = GA#COR,OP#COR,FOR#TB,GA#LTS,FOR#MOD,GA#PMAI,LDR#LID,HCC#LAD,HN#LAD,OP#LAD,GA#LAD,GA#WM,OP#WM,HN#WM,OP#VZ,HN#VZ,GA#VZAI

我希望将它转换为看起来像这样的多数组:

Array ( [GA] => Array ( [1] => COR 
                        [2] => LTS 
                        [3] => LAD 
                        [4] => WM 
                        [5] => VZAI 
                      )
        [FOR] => Array( [1] => TB
                        [2] => MOD
                      )
        [OP] => Array(  [1] => COR
                        [2] => WM
                        [3] => VZ
                      )
)

所以#在女主阵列中确定值必须来

2 个答案:

答案 0 :(得分:1)

CBroe给了你传统方式的步骤,所以只是为了好玩,因为我很无聊:

parse_str(str_replace(array('#',','), array('[]=','&'), $hccRol ), $result);
print_r($result);

PHP> = 5.4.0:

parse_str(str_replace(['#',','], ['[]=','&'], $hccRol ), $result);

答案 1 :(得分:0)

以下是爆炸定界字符,迭代数据并声明新数组结构的基本方法。我将尊重您的期望输出,并从1(而不是标准的0)开始键。

代码:(Demo

$hccRol = "GA#COR,OP#COR,FOR#TB,GA#LTS,FOR#MOD,GA#PMAI,LDR#LID,HCC#LAD,HN#LAD,OP#LAD,GA#LAD,GA#WM,OP#WM,HN#WM,OP#VZ,HN#VZ,GA#VZAI";

foreach (explode(",", $hccRol) as $item) {
    $halves = explode("#", $item, 2);
    if (!isset($result[$halves[0]])) {
        $result[$halves[0]][] = null;  // add zero key placeholder element
    }
    $result[$halves[0]][] = $halves[1];
    unset($result[$halves[0]][0]);     // remove the placeholder element
}

var_export($result);

输出:

array (
  'GA' => 
  array (
    1 => 'COR',
    2 => 'LTS',
    3 => 'PMAI',
    4 => 'LAD',
    5 => 'WM',
    6 => 'VZAI',
  ),
  'OP' => 
  array (
    1 => 'COR',
    2 => 'LAD',
    3 => 'WM',
    4 => 'VZ',
  ),
  'FOR' => 
  array (
    1 => 'TB',
    2 => 'MOD',
  ),
  'LDR' => 
  array (
    1 => 'LID',
  ),
  'HCC' => 
  array (
    1 => 'LAD',
  ),
  'HN' => 
  array (
    1 => 'LAD',
    2 => 'WM',
    3 => 'VZ',
  ),
)

如果您很高兴拥有0索引,则只需删除if{}块和unset()行。