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

问题描述 投票:-1回答:2

我在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
                      )
)

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

php multidimensional-array
2个回答
1
投票

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

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

PHP> = 5.4.0:

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

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()线。

© www.soinside.com 2019 - 2024. All rights reserved.