2010-05-28 7 views
1

hey, j'ai ce nom de chemin d'un élément d'entrée interesse[angebote][flurfuerderfahrzeuge] comme une chaîne dans mon var php. maintenant j'ai besoin de le convertir en quelque sorte (avec regex ou explode()) donc il ressemble à ceci: $_POST['interesse']['angebote']['flurfuerderfahrzeuge'] et l'utilisation eval() pour obtenir la valeur. Mais je suis sûr qu'il doit y avoir un moyen beaucoup plus facile de le faire. Des idées? Merci!obtenir le tableau avec le chemin de tableau HTML

+0

eval sur un élément d'entrée? C'est demander le chaos, mon ami. C'est demander le chaos. – webbiedave

Répondre

2

eval() est mal(). Et il existe des options plus rapides pour l'éviter dans ce cas.

Si vous voulez juste convertir la syntaxe, j'ai une expression régulière:

$name = '$' . preg_replace("/\[([^\]]+)\]/", '["$1"]', $path); 

Si votre chaîne d'entrée contient non seulement le chemin, mais aussi une valeur (ajoutez une valeur factice si vous devez), alors vous pouvez simplement utiliser parse_str() pour extraire les noms de tableau en un véritable tableau PHP:

$path = "whatever[subname][deepnesting]=1"; 
    parse_str($path, $as_var); 
    print_r($as_var); 

connaître un peu plus vos données d'entrée.


Bon, je viens de comprendre ce que vous voulez dire. Vous voulez submerger dans le tableau $ _POST. Ensuite, utilisez les références étape par étape comme ceci:

$path = "xxxx[yyyy][zzzz]"; 
$ref = & $_POST; 

preg_match_all("/\w+/", $path, $uu); 
foreach ($uu[0] as $subname) { 
    $ref = & $ref[$subname]; 
} 

print_r($ref); // = $_POST[xxxx][yyyy][zzzz] 
+0

non je n'ai pas l'entrée, si j'avais l'entrée ce hack serait inutile. – antpaw

+0

solution géniale et élégante, merci. Je ne sais pas pourquoi vous avez utilisé des références. – antpaw

0

ok je sais que ce simple mais je regarde si laid, thats ce que j'utilise maintenant:

$path = 'interesse[angebote][flurfuerderfahrzeuge]'; 
    $post_var = '$_POST['.str_replace(']]', ']', str_replace('[', '][', $path)); 
    eval('$value = '.$post_var.';'); 
    echo $value; 
+0

Vous devriez vous inquiéter de quelqu'un qui passe '' interesse [angebote] [flurfuerderfahrzeuge]; unlink ("somefile"); '' – webbiedave

+0

haha ​​je ne pourrais jamais analyser les données de poste: D. le $ path var est codé en dur par moi. – antpaw

+1

Je vois. J'ai lu 'j'ai ce nom de chemin d'un élément d'entrée' et supposé que ce serait d'entrée. – webbiedave

Questions connexes