hey, i have this path name from an input element interesse[angebote][flurfuerderfahrzeuge]
as a string in my php var. now i need convert it somehow (with regex or explode()) so it looks like this: $_POST['interesse']['angebote']['flurfuerderfahrzeuge']
and the use eval()
to get the value. But I'm sure there must be a much easier way do this.
Any ideas? Thanks!
views:
34answers:
2
+2
A:
eval() is evil(). And there are some faster options to avoid it in this case.
If you just want to convert the syntax, then I have a regex:
$name = '$' . preg_replace("/\[([^\]]+)\]/", '["$1"]', $path);
If your input string not only contains the path, but also an value (attach a dummy value if you must), then you can just use parse_str() to extract the array names into a real PHP array:
$path = "whatever[subname][deepnesting]=1";
parse_str($path, $as_var);
print_r($as_var);
Tell something more about your input data.
Okay, just figured out what you mean. You want to submerge in the $_POST array. Then use step-wise references like so:
$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]
mario
2010-05-28 16:14:48
no i dont have the input, if i had the input this hack would be pointless.
antpaw
2010-05-28 16:19:22
awesome and elegant solution, thank you. not sure why you've used references.
antpaw
2010-05-31 08:19:44
A:
ok i know its simple but i looks so ugly, thats what i use now:
$path = 'interesse[angebote][flurfuerderfahrzeuge]';
$post_var = '$_POST['.str_replace(']]', ']', str_replace('[', '][', $path));
eval('$value = '.$post_var.';');
echo $value;
antpaw
2010-05-28 16:16:50
You should worry about someone passing `'interesse[angebote][flurfuerderfahrzeuge]; unlink("somefile");'`
webbiedave
2010-05-28 16:22:44
haha i would never parse the post data :D. the $path var is hardcoded by me.
antpaw
2010-05-28 16:26:18
I see. I read `i have this path name from an input element` and assumed it would be from input.
webbiedave
2010-05-28 16:55:44