2015-08-05 12 views
7

Ich habe ein Array wie untenKonvertieren von Array-Schlüssel zu mehrdimensionales Array

$db_resources = array('till' => array(
'left.btn' => 'Left button', 
'left.text' => 'Left text', 
'left.input.text' => 'Left input text', 
'left.input.checkbox' => 'Left input checkbox'   
)); 

Ich brauche dieses Array dynamisch wie unter

konvertieren
'till' => array(
    'left' => array(
     'btn' => 'Left button', 
     'text' => 'Left text', 
     'input' => array(
      'text' => 'Left input text', 
      'checkbox' => 'Left input checkbox' 
     ) 
    ) 
) 

ich den Schlüssel versucht, mit explodieren. es funktioniert, wenn alle Schlüssel nur ein "." haben. Aber der Schlüssel hat einen dynamischen. Also bitte hep mich, das Array dynamisch zu konvertieren. Ich habe versucht, diese Below-Code

$label_array = array(); 
foreach($db_resources as $keey => $db_resources2){ 
    if (strpos($keey,'.') !== false) { 
     $array_key = explode('.',$keey);  
     $frst_key = array_shift($array_key); 
     if(count($array_key) > 1){ 
      $label_array[$frst_key][implode('.',$array_key)] = $db_resources2; 
      //Need to change here 
     }else{ 
      $label_array[$frst_key][implode('.',$array_key)] = $db_resources2; 
     } 
    } 
} 
+0

Und was Sie bisher versucht haben? Sende deine Versuche zu –

+0

@Uchiha - ich habe die Frage bearbeitet. Und Aktualisiert Mein Code hier – Jegan

+0

Verwenden 'for_each' mit' $ array_key' seit explode gibt ein Array zurück – Sayed

Antwort

1

Es könnte elegantere Möglichkeiten, darüber zu gehen, aber hier ist ein Beispiel dafür, es mit rekursive Hilfsfunktion zu tun:

function generateNew($array, $keys, $currentIndex, $value) 
    { 
     if ($currentIndex == count($keys) - 1) 
     { 
      $array[$keys[$currentIndex]] = $value; 
     } 
     else 
     { 
      if (!isset($array[$keys[$currentIndex]])) 
      { 
       $array[$keys[$currentIndex]] = array(); 
      } 

      $array[$keys[$currentIndex]] = generateNew($array[$keys[$currentIndex]], $keys, $currentIndex + 1, $value); 
     } 

     return $array; 
    } 

    $result = array(); 
    // $temp equals your original value array here... 
    foreach ($temp as $combinedKey => $value) 
    { 
     $result = generateNew($result, explode(".", $combinedKey), 0, $value); 
    } 
+0

Ich denke Das ist eine nette Antwort. – Sayed

+0

@ejuhjav Danke .. Es funktioniert auch für meine multidimensionale Array. – Jegan