2009-08-28 6 views
1

Étant donné un tableau multidimensionnel dont vous ne connaissez pas nécessairement la structure de; Comment chercher une clé par nom et modifier ou ajouter à son contenu? La valeur de la clé pourrait être une chaîne ou un tableau et les effets devraient être appliqués de toute façon - j'ai regardé array_walk_recursive, mais il ignore tout ce qui contient un autre tableau ...Trouver la clé de tableau dans php et changer sa valeur ou son contenu?

Répondre

2

Est-ce que cela fonctionne?

function arrayWalkFullRecursive(&$array, $callback, $userdata = NULL) { 
    call_user_func($callback, $value, $key, $userdata); 

    if(!is_array($array)) { 
     return false; 
    } 

    foreach($array as $key => &$value) { 
     arrayWalkFullRecursive($value); 
    } 

    return true; 
} 

arrayWalkFullRecursive($array, 
    create_function(    // wtb PHP 5.3 
     '&$value, $key, $data', 
     'if($key == $data['key']) { 
      $value = $data['value']; 
     }' 
    ), 
    array('key' => 'foo', 'value' => 'bar') 
); 
+0

N'a pas tout à fait travaillé, mais m'a mis sur la bonne voie. J'ai mis en place une fonction appelée remove_recursive() pour supprimer les éléments du tableau, maintenant j'ai besoin de faire les add_recursive() et change_recursive(). :) –

+0

@Belanger, Quel est le problème avec le mien? Qu'est-ce qui n'a pas fonctionné? – strager

+0

Oh, attends, je pense que je sais. Je vais modifier ma réponse. – strager

1

Les clés de tableau en PHP sont ints et les cordes. Vous ne pouvez pas avoir une clé de tableau array. Donc oui, array_walk_recursive() est ce que vous voulez.

+0

Je veux dire la valeur qui correspond à la clé. Si la valeur est un autre niveau de tableau, il l'ignore et se recourt vers l'intérieur jusqu'à ce qu'il trouve quelque chose avec une valeur non-tableau. –

0

De Arrays:

Une clé peut être soit un nombre entier ou une chaîne.

Les tableaux ne peuvent pas être utilisés comme clés. Pour obtenir les clés d'un tableau, utilisez array_keys.

Questions connexes