2015-11-07 1 views
0

Étant donné le tableau suivant:PHP: convertir un tableau multidimensionnel

Array 
(
    [entity] => Array 
    (
     [title] => Array 
     (
      [empty] => error message 
     ) 
     [link] => Array 
     (
      [empty] => error message 
     ) 
     [authors] => Array 
     (
      [0] => Array 
      (
       [full_name] => Array 
       (
        [max_lengh] => another error message 2 
       ) 
      ) 
     ) 
    ) 
) 

Comment convertir en une forme comme:

$array = [ 
'entity[title]' => 'error message', 
'entity[link]' => 'error message', 
'entity[authors][0][full_name]' => 'another error message 2', 
]; 

Je pense que cela se fait via récursion ou utiliser les références, mais la deux choses je ne suis pas bon) En vous remerciant d'avance!

+0

Vous pouvez le faire en utilisant 'foreach()' – aldrin27

+1

Peut-être essayer certaines choses, vous pourriez vous surprendre, mais si vous avez un problème, vous pouvez poser des questions spécifiques * * et partager le code que vous avez essayé, qui est plus susceptible d'obtenir une réponse. – blm

Répondre

0

Peut-être pas expliqué correctement à la tâche. Merci à tous.

function format(array $array, $withLastKey = false) { 
     $iterator = new RecursiveIteratorIterator(
      new RecursiveArrayIterator($array)); 
     $returnArray = []; 
     foreach ($iterator as $key => $value) { 
      $keys = []; 
      for ($i = $iterator->getDepth(); $i >= 0; $i--) { 
       $childKey = $iterator->getSubIterator($i)->key(); 
       // if first element then without bracket 
       $keys[] = ($i == 0) ? $childKey : '[' . $childKey . ']'; 
      } 
      $keys = array_reverse($keys); 
      ($withLastKey) ?: array_pop($keys); 
      $returnArray[implode('', $keys)] = $value; 
     } 
     return $returnArray; 
    } 
0

Vous êtes totalement mélangé à propos de la syntaxe de tableau. Il n'y a aucune raison de vouloir un tableau comme ça. Seul point à faire est que le [vide] devient [0], vous pouvez essayer var_export pour le montrer mieux.

À quoi sert-il?

$array = [ 
'entity[title]' => 'error message', 
'entity[link]' => 'error message', 
'entity[authors][0][full_name]' => 'another error message 2', 
]; 

Qu'est-ce que c'est ...? Vous avez le [] dans les citations. Je veux dire, vous pouvez le faire très facilement

$array2['title'] = $array['title'][0]; 

etc.

Une autre chose à répondre, pourquoi vous avez comme ça en premier lieu?

Quoi qu'il en soit, cela devrait fonctionner comme ceci.

foreach ($array as $key => $value) 
{ 
    if (isset($value[0]) && !is_array($value[0])) 
    { 
     $array[$key] = $value[0]; 
    } 
}