2009-12-23 7 views
1

J'ai un tableau PHP comme celui-ci (syntaxe sans):PHP: Les éléments de tableau avec une certaine clé

array 
(
    ['one'] => array (
         ['wantedkey'] => 5 
         ['otherkey1'] => 6 
         ['otherkey2'] => 7 
        ) 
    ['two'] => => array (
         ['otherkey1'] => 5 
         ['otherkey2'] => 6 
         ['wantedkey'] => 7 
        ) 
    ['three'] => => array (
         ['otherkey1'] => 5 
         ['wantedkey'] => 6 
         ['otherkey2'] => 7 
        ) 
) 

Quelle est la meilleure façon d'imprimer les valeurs uniquement pour les éléments avec une clé de 'wantedkey', si je utilise array_walk_recursive par exemple?

Merci!

Répondre

5

Quelque chose comme ça ne fonctionnerait pas?

function test_print($item, $key) { 
    if ($key === 'wantedkey') { 
    print $item; 
    } 
} 

array_walk_recursive($myarray, 'test_print'); 

Ou est-ce que quelque chose me manque? [Je suppose que j'étais]

Donc, la meilleure façon que je peux chose de gérer ce que vous cherchez serait quelque chose comme:

function inner_walk ($item, $key) { 
    if ($key === 'wantedkey2') { 
    print $item; 
    } 
} 

function outer_walk ($item, $key) { 
    if (($key === 'wantedkey1') && (is_array($item)) { 
    array_walk($item,'inner_walk'); 
    } 
} 

array_walk($myarray,'outer_walk'); 

Le problème avec array_walk_recursive est qu'il ne vous dit pas réellement où vous êtes dans le tableau. Vous pourriez en théorie appliquer quelque chose de similaire à array_walk_recursive à ce qui précède, mais puisque vous avez seulement présenté un tableau à deux dimensions, en utilisant array_walk devrait fonctionner très bien.

+0

Toutes mes excuses, j'oublié de mentionner, si je veux vérifier si les clés sont les mêmes d'une manière multidimensionnelle: '$ item [ « wantedkey1 »] [ « wantedkey2 »]' Comment puis-je vous assurer les deux clés sont présentes? – ash

0

Je suis peut-être en train de miser quelque chose ici aussi, mais pourquoi ne pas simplement les forcer?

foreach($myarray as $subarray) { 
    echo $subarray['wantedkey']; 
} 

Ne répond directement depuis son ne pas utiliser array_walk_recursive votre question initiale, mais il semble faire ce que vous demandez avec moins de complexité. Ai-je mal compris?

+0

Le seul inconvénient de ceci est que vous lanceriez des exceptions si le $ subarray ne contenait pas de clé voulue. – Kitson

Questions connexes