使用长字符串PHP创建多维数组

使用长字符串PHP创建多维数组,php,arrays,Php,Arrays,假设我有这样一个字符串: all:ticket_location:is:5|||all:ticket_sub_location:is:1|||any:ticket_is:created:NULL|||any:ticket_is:updated:NULL|||action:assigned_agent_uid:admin array( [all] => Array ( [ticket_location] => Array

假设我有这样一个字符串:

all:ticket_location:is:5|||all:ticket_sub_location:is:1|||any:ticket_is:created:NULL|||any:ticket_is:updated:NULL|||action:assigned_agent_uid:admin
 array(
       [all] => Array
          (
              [ticket_location] => Array (
                                          [is]=>5
                                         )
              [ticket_sub_location] => Array (
                                              [is]=>1
                                              )               
          )
       [any] => Array
          (
              [ticket_is] => Array (
                                     [created] => NULL
                                   )
              [ticket_is] => Array (
                                     [updated] => NULL
                                   )               
          )
       [action] => Array
          (
              [assigned_agent_ui] => Admin          
          )            
) 
我需要一个如下所示的数组:

all:ticket_location:is:5|||all:ticket_sub_location:is:1|||any:ticket_is:created:NULL|||any:ticket_is:updated:NULL|||action:assigned_agent_uid:admin
 array(
       [all] => Array
          (
              [ticket_location] => Array (
                                          [is]=>5
                                         )
              [ticket_sub_location] => Array (
                                              [is]=>1
                                              )               
          )
       [any] => Array
          (
              [ticket_is] => Array (
                                     [created] => NULL
                                   )
              [ticket_is] => Array (
                                     [updated] => NULL
                                   )               
          )
       [action] => Array
          (
              [assigned_agent_ui] => Admin          
          )            
) 
到目前为止,这是我的代码,但我失败得很惨。对于我来说,很难将我的头脑集中在多维数组上

    $trigger_data = "all:ticket_location:is:5|||all:ticket_sub_location:is:1|||any:ticket_is:created:NULL|||any:ticket_is:updated:NULL|||action:assigned_agent_uid:admin";

    $parts = explode("|||",$trigger_data);
    $rules = array();
    $actions = array();
    foreach($parts as $value) {
        $pieces = explode(":",$value);
        if ($pieces[0] == "all" || $pieces[0] == "any") {
            $rules[$pieces[0]][$pieces[1]][$pieces[2]] = $pieces[3];
        }
        if ($pieces[0] == "action") {
            $actions[$pieces[0]][$pieces[1]] = $pieces[2];
        }

    }

    print_r($pieces);
    print_r($actions);
    exit;

在做其他事情之前,您不能在
any
中同时使用
ticket\u的两个
键。无论如何,只要使用引用,这样您就可以在必要的深度上连续创建关键点,然后在需要时使用
explode

$trigger_data = "all:ticket_location:is:5|||all:ticket_sub_location:is:1|||any:ticket_is:created:NULL|||any:ticket_is:updated:NULL|||action:assigned_agent_uid:admin";
$final = array();
foreach(explode('|||', $trigger_data) as $e) {
    $e = explode(':', $e);
    $result = &$final;
    $value = end($e);
    foreach($e as $parts) {
        if($value === $parts) {
            $result = $value;
        } else {
            $result = &$result[$parts]; 
        }

    }
}

print_r($final);

@DobotJr肯定没问题