在Php中从多维关联数组中获取值

在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'

我有一个POST请求数组,如下所示

 $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