在Php中从多维关联数组中获取值
我有一个POST请求数组,如下所示在Php中从多维关联数组中获取值,php,arrays,associative,Php,Arrays,Associative,我有一个POST请求数组,如下所示 $request = array (size=2) 'licence' => string 'uDyQwFwqV7aQG2z' (length=15) 'user' => array (size=7) 'first_name' => string 'Danut' (length=5) 'last_name' => string 'Florian'
$request = array (size=2)
'licence' => string 'uDyQwFwqV7aQG2z' (length=15)
'user' =>
array (size=7)
'first_name' => string 'Danut' (length=5)
'last_name' => string 'Florian' (length=7)
'username' => string 'daniesy9' (length=8)
'password' => string '123456' (length=6)
'rpassword' => string '123456' (length=6)
'email' => string 'daniesy+1@me.com' (length=16)
'phone' => string '9903131' (length=7)
这实际上是一个数组,它表示表单发送的值。我知道元素的名称,例如用户名输入的名称为user[username]
,我必须按名称从数组中查找相关值。比如:
$key = "user[username]";
$request[key];
你知道怎么做吗
我知道正确的方法是
$request[“user”][“username”]
,但它非常复杂,因为我必须使用表单中的字段名,这些字段名是user[username]、user[firstname],等等,并且可能有多达4个深度级别 在评论中回答,但问题与
eval(“$username=$request[“user”][“username”];”);
编辑
Eval不是有效的建议作为请求数据
所以我建议在这篇文章中使用第二种方法
<?php
$request = array(
'user' => array(
'username' => 'joe_blogs'
)
);
function extract_data($string) {
global $request;
$found_matches = preg_match_all('/\[\"([a-z]+)\"\]/', $string, $matches);
if (!$found_matches) {
return null;
}
$current_data = $request;
foreach ($matches[1] as $name) {
if (key_exists($name, $current_data)) {
$current_data = $current_data[$name];
} else {
return null;
}
}
return $current_data;
}
$username = extract_data('request["user"]["username"]');
?>
这个函数解决了我的问题。它首先将字符串(也称为输入名称)拆分为一个键数组,然后按键对数组进行隐性深度搜索,直到找到一个不是数组的值,否则返回FALSE
。可以用点分隔键。基本示例:
<?php
class ArrayDot
{
protected $array = [];
public function __construct(array $array) {$this->array = $array;}
public function get($path)
{
$array = $this->array;
foreach(explode('.', $path) as $key) {
$array = $array[$key];
}
return $array;
}
}
$array = [
'user' => [
'username' => 'tootski',
]
];
$a = new ArrayDot($array);
echo $a->get('user.username'); # tootski
您可能可以重新构造表单,以便知道use@Dagon这不是一个选项…问题是我只有这样的字符串user[username]
,我应该用它们从数组中提取值。另外,作为一个表单请求的数据,评估不是有点危险吗?是的,是的,很抱歉没有考虑到这一点。我已经更新了它。你想让我只为用户[用户名]更新它吗?不,不,没关系!谢谢我想我有一个解决办法,但我觉得我的答案更好
<?php
class ArrayDot
{
protected $array = [];
public function __construct(array $array) {$this->array = $array;}
public function get($path)
{
$array = $this->array;
foreach(explode('.', $path) as $key) {
$array = $array[$key];
}
return $array;
}
}
$array = [
'user' => [
'username' => 'tootski',
]
];
$a = new ArrayDot($array);
echo $a->get('user.username'); # tootski