2010-11-05 7 views
0

N dans cette question signifie n'importe quel nombre arbitraire de n'importe quelle taille et n'est pas nécessairement (mais pourrait être) le même. J'ai un tableau avec N nombre de paires clé => valeur. Ces paires clé => valeur peuvent également contenir un autre tableau de taille N avec N nombre de paires clé => valeur. Ce tableau peut avoir une profondeur de N, ce qui signifie que toute paire clé => valeur du tableau pourrait correspondre à un autre tableau. Comment puis-je obtenir toutes les valeurs de ce tableau (les stocker dans un nouveau tableau)? la clé => paires de valeurs?Traverser toutes les valeurs d'un tableau de tableaux

Répondre

2

array-walk-recursive

voler à Yurkowski dot net 26-Oct-2010 06:16

Si vous avez vraiment pas particulièrement soins sur les clés d'un tableau, vous pouvez capturer toutes les valeurs tout simplement:

$sample = array(
    'dog' => 'woof', 
    'cat' => array(
     'angry' => 'hiss', 
     'happy' => 'purr' 
    ), 
    'aardvark' => 'kssksskss' 
); 

$output = array(); 

// Push all $val onto $output. 
array_walk_recursive($sample, create_function('$val, $key, $obj', 'array_push($obj, $val);'), &$output); 
// Printing echo nl2br(print_r($output, true)); 

/* 
* Array 
* (
* [0] => woof 
* [1] => hiss 
* [2] => purr 
* [3] => kssksskss 
*) 
*/ 
+0

Bien que cela ne semble pas être la meilleure réponse, mes seuls états d'âme sont que cette fonctionnalité est uniquement pris en charge par PHP> = 5.3. Mais encore ce serait la meilleure façon de le faire. – bmarti44

+0

modifier à mon commentaire précédent, PHP en ligne et les fonctions ne sont supportés que par PHP> = 5.3. Si cette fonction utilisait juste une référence à une fonction, elle fonctionnerait dans les anciennes versions de PHP. – bmarti44

1

Vous pouvez faire smt comme ceci:

$output = array(); 

function genArray($arr) { 
    global $output; 
    foreach($arr as $key => $val) { 
     if(is_array($val)) 
      genArray($val); 
     else 
      output[$key] = $val; 
    } 
} 

genArray($myArray); 

lieu de récursivité, en utilisant la variable globale et la fonction, il pourrait se faire via des boucles, mais cela est juste une idée générale, et a probablement besoin d'un peu de votre attention, de toute façon . Cela devrait être une bonne chose :)

+1

Avec une ancienne version de PHP, c'est la meilleure solution. Je voudrais supprimer la variable globale et juste le renvoyer dans la fonction si. – bmarti44

+0

@ bmarti44: retourne un tableau? ou un élément de tableau? – hummingBird

+0

Ah, je vois que vous ne pouvez pas le retourner dans ce cas. Cela reviendrait à un élément de tableau, vous avez raison. – bmarti44

Questions connexes