2011-01-30 3 views
1

J'ai un tableau multidimensionnel où cela fonctionne:variables PHP tableau de variables clés liste

print_r($temp[1][0]); 

Comment puis-je faire ce travail ... J'ai la liste des clés sous forme de chaîne comme ceci:

$keys = "[1][0]"; 

Je veux accéder à la matrice en utilisant la liste des clés, comment cela peut-il être fait? Cela fonctionne, mais les touches sont évidemment difficiles codées:

$keys = "[1][0]"; 
$tempName = 'temp'; 

print_r(${$tempName}[1][0]); 

// tried lots of variations like, but they all produce errors or don't access the array 
print_r(${$tempName.${$keys}}); 

Merci, Chris

+0

Félicitations. Vous venez de définir mon nouveau record personnel pour l'idée/code fondamentalement brisé que j'ai vu sur SO. "Les variables variables sont soignées, mais voyons jusqu'où nous pouvons les prendre ..." – delnan

Répondre

4
function accessArray(array $array, $keys) { 
    if (!preg_match_all('~\[([^\]]+)\]~', $keys, $matches, PREG_PATTERN_ORDER)) { 
     throw new InvalidArgumentException; 
    } 

    $keys = $matches[1]; 
    $current = $array; 
    foreach ($keys as $key) { 
     $current = $current[$key]; 
    } 

    return $current; 
} 

echo accessArray(
    array(
     1 => array(
      2 => 'foo' 
     ) 
    ), 
    '[1][2]' 
); // echos 'foo' 

serait encore mieux, si vous avez réussi à array(1, 2), au lieu de [1][2]: On pourrait éviter la (fragile preg_match_all analyse.

+0

J'aime cette approche parce qu'elle est élégante et sûre. –

+0

Eh bien, je ne l'appellerais pas "élégant", mais au moins c'est sûr;) – NikiC