2015-08-05 15 views
7

Mam tablicę jak poniżejKonwersja klucz tablicy do tablicy wielowymiarowej

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

muszę przekonwertować tej tablicy jak poniżej

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

Próbowałem klawisza z wybuchnąć dynamicznie. działa, jeśli wszystkie klucze mają tylko jeden ".". Ale klucz ma dynamiczny. więc proszę, pomóż mi dynamicznie przekonwertować tablicę. Próbowałem to poniższy kod

$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

A co ty próbowałeś do tej pory? Opublikuj swoje próby również –

+0

@Uchiha - ja zredagowałem Pytanie. Zaktualizowany tutaj mój kod: – Jegan

+0

użycie 'for_each' z' $ array_key' od czasu wybrania zwraca tablicę – Sayed

Odpowiedz

1

Nie może być bardziej elegancki sposób się do tego zabrać, ale tutaj jest jednym z przykładów robi to z funkcji rekurencyjnej pomocnika:

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

to jest dobra odpowiedź. – Sayed

+0

@ejuhjav Dzięki .. Działa również dla mojej tablicy wielowymiarowej. – Jegan

Powiązane problemy