2009-07-02 6 views
0

Dites ceci est ma chaîneComment puis-je utiliser une chaîne pour obtenir une valeur d'un tableau multidimensionnel?

$string = 'product[0][1][0]'; 

Comment pourrais-je utiliser seule cette chaîne pour obtenir effectivement la valeur d'un tableau comme si je l'avais utilisé ceci:

echo $array['product'][0][1][0] 

J'ai foiré autour avec preg_match_all avec cette regex (/\[([0-9]+)\]/), mais je suis incapable de trouver quelque chose de satisfaisant.

Des idées? Merci d'avance.

Répondre

4

Vous pouvez utiliser preg_split pour obtenir les indices de tableau individuels, puis une boucle pour appliquer ces indices un par un. Voici un exemple utilisant une expression rationnelle /[][]+/ pour diviser la chaîne chaque fois qu'elle trouve un ou plusieurs crochets.

(Lire la construction [][] comme [\]\[], à savoir une classe de caractères qui correspond à crochets à droite ou à gauche. Les barres obliques inverses sont en option.)

function getvalue($array, $string) 
{ 
    $indices = preg_split('/[][]+/', $string, -1, PREG_SPLIT_NO_EMPTY); 

    foreach ($indices as $index) 
     $array = $array[$index]; 

    return $array; 
} 
0

C'est prettttty hacky, mais cela fonctionnera. Je ne sais pas combien votre structure de tableau va changer, non plus, cela ne fonctionnera pas si vous devenez trop dynamique.

$array = array(); 

$array['product'][0][1][0] = "lol"; 

$string = 'product[0][1][0]'; 

$firstBrace = strpos($string, "["); 

$arrayExp = substr($string, $firstBrace); 
$key = substr($string, 0, $firstBrace); 

echo $arrayExp, "<br>"; 
echo $key, "<br>"; 

$exec = "\$val = \$array['".$key."']".$arrayExp.";"; 

eval($exec); 

echo $val; 
0

Pourquoi ne pas utiliser eval()?

<?php 
    $product[0][1][0] = "test"; 
    eval ("\$string = \$product[0][1][0];"); 
    echo $string . "\n"; 
    die(); 
?>