如果a的表单输入的名称如“name [0] [firstname]”,$ _POST将检索为:
'name' =>
array (size=1)
0 =>
array (size=9)
'firstname' => null
所以echo $_POST['name'][0]['firstname']
会给我null。
问题是我如何从数组键动态构建帖子查询?所以,例如:
$foo = array('name', 0, 'firstname');
echo $_POST[$foo]; // obviously doesn't work
我需要做的是从数组中构建此语句$_POST['name'][0]['firstname']
,但无法找到方法。我想也许$_POST{'[' . implode('][',$foo) . ']'}
可能有效,但我得到未定义的索引:['name'][0]['firstname']
。
最终解决方案**
关于@Alireza和@Matteo的解决方案,两者都有效,除非数组长于$ _POST数组,例如,如果数组是$ foo = array('name',0,' firstname','lastname')和post值是array ['name'] [0] ['firstname'] =“XXX”,结果将是“X”,它是结果XXX的索引0。因此,它需要检查帖子的键而不是值。
因此,我的最终解决方案是:
function getValue($res, $foo)
{
foreach ($foo as $val) {
if (is_array($res) && array_key_exists($val, $res)) {
$res = $res[$val];
} else {
return false;
}
}
return $res;
}
示例:
$post = array(
'name' => array(
0 => array(
'firstname' => 'XXX'
),
)
);
echo getValue($post, array('name', 0, 'firstname'));
> XXX
echo getValue($post, array('name', 0, 'firstname', 'lastname'));
> false
echo getValue($post, array('name', 0, 'firstname', 0));
> false
echo getValue($post, array('name', 0, 0));
> false
echo getValue($post, array('name', 0));
> Array (eg, Array ( [firstname] => XXX )) - expected
感谢您的帮助。
答案 0 :(得分:1)
如果适用于您的话,请试试这个:
function getArrayValue($basearray,$name){
$args = func_get_args();
$argc = func_num_args();
$base = isset($basearray[$name])
? $basearray[$name]
: null;
if($argc > 2 && is_array($base)){
for($i=2; $i < $argc; $i++){
$base = getArrayValue($base,$args[$i]);
}
}
return $base;
}
$myname = getArrayValue($_POST,0,'firstname');
答案 1 :(得分:1)
我认为非常更容易:
$foo = array('name', 0, 'firstname')
$res = $_POST;
foreach ($foo as $val) {
$res = $res[$val];
}
echo $res;
$array[0]['f']['p'][8]['Hi'] = 'Hello World!';
$foo = array(0,'f','p',8,'Hi');
$res = $array;
foreach ($foo as $val) {
$res = $res[$val];
}
echo $res;
回应'Hello World!'
答案 2 :(得分:1)
首先,下一行中只应有一个右括号:
$foo = array('name', 0, 'firstname');
其次,如果要使用$foo
的值作为键创建多维数组,则需要递归函数:
function create_multidimensional_array(&$arr, $keys, $val){
if($keys === array()){
$arr = $val;
}
else{
$key = array_shift($keys);
$arr[$key] = array();
create_multidimensional_array($arr[$key], $keys, $val);
}
}
$foo = array('name', 0, 'firstname');
create_multidimensional_array($_POST, $foo, "Charles");
print_r($_POST);
输出将是:
Array
(
[name] => Array
(
[0] => Array
(
[firstname] => Charles
)
)
)
答案 3 :(得分:0)
试试这个:
function getValue($array, $key) {
$val = NULL;
foreach((array) $key as $k) {
$val = @$array[$k];
$array = @$array[$k];
}
return $val;
}
所以,例如
$array = array(
'name' => array(
0 => array(
'firstname' => 'XXX'
),
)
);
然后getValue($array, 'name') == array(0 => array('firstname' => 'XXX'))
和getValue($array, array('name', 0, 'firstname')) == 'XXX'
有关实例,请参阅http://sandbox.onlinephpfunctions.com/code/0780e1165ee9851f33fb1e019717ab32cd527d51