2016-06-22 12 views
2

sagen, dass ich eine Zeichenfolge wie diese:erstellen mehrdimensionales Array aus langen String PHP

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 

ich ein Array benötigen, die etwa wie folgt aussieht:

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

Dies ist mein Code so weit, aber Ich versage kläglich. Schwer für mich, meinen Kopf um mehrdimensionale Arrays zu wickeln. in der gleichen Dimension innerhalb any

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

Antwort

3

Bevor Sonstigem, Sie beide ticket_is Schlüssel nicht haben. Wie auch immer, nur Referenzen verwenden, so dass Sie Ihre Schlüssel immer wieder auf die notwendige Tiefe schaffen, dann explode bei Bedarf verwenden:

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

Out

+0

ah ha! OK vielen Dank! – DanielOlivasJr

+0

@DobotJr sicher kein Problem – Ghost