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


explode string to a multi array with 2 delimiter

我在php:中有这样的sting I变量

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

因此,#决定了主数组中的值必须来自

CBroe为您提供了以传统方式进行操作的步骤,所以只是为了好玩,因为我很无聊:

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

PHP>=5.4.0:

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

以下是对分隔字符进行分解、迭代数据和声明新数组结构的基本方法。我将尊重您想要的输出,并在1而不是标准的0启动密钥。

代码:(演示)

$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()行即可。