1 votes

récupérer le tableau avec le chemin du tableau html

Hé, j'ai ce nom de chemin à partir d'un élément d'entrée interesse[angebote][flurfuerderfahrzeuge] comme une chaîne de caractères dans ma variable php. Maintenant, je dois la convertir d'une manière ou d'une autre (avec regex ou explode()) pour qu'elle 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 simple de le faire. Avez-vous une idée ? Merci !

2voto

mario Points 76989

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

Si vous souhaitez simplement convertir la syntaxe, j'ai une expression rationnelle :

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

Si votre chaîne d'entrée ne contient pas seulement le chemin, mais aussi une valeur (attachez une valeur fictive si vous le souhaitez), vous pouvez alors simplement utiliser parse_str() pour extraire les noms des tableaux dans un vrai tableau PHP :

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

Précisez vos données d'entrée.


D'accord, je viens de comprendre ce que vous voulez dire. Vous voulez vous immerger dans le tableau $_POST. Ensuite, utilisez des références progressives comme suit :

$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]

0voto

antpaw Points 5922

Je sais que c'est simple mais c'est trop moche, c'est ce que j'utilise maintenant :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X