Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用动态变量键名创建数组_Php - Fatal编程技术网

Php 如何使用动态变量键名创建数组

Php 如何使用动态变量键名创建数组,php,Php,我有一个具有动态字段名的表单 比如说 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form method="POST" action="result.php?r=1542967950"> <input

我有一个具有动态字段名的表单

比如说

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <form method="POST" action="result.php?r=1542967950">
        <input type="text" name="name[]" value="name 1">
        <input type="text" name="user[first][name][]" value="user first name 1">
        <input type="text" name="user[last][name][]" value="user last name 1">
        <input type="text" name="name[]" value="name 2">
        <input type="text" name="user[first][name][]" value="user first name 2">
        <input type="text" name="user[last][name][]" value="user last name 2">
        <button type="submit">go</button>
    </form>
</body>
</html>
我的目标是创建一个新数组,其结构如下:

$datas[0]['name'] = 'name 1';
$datas[0]['user']['first']['name'] = 'first name 1';
$datas[0]['user']['last']['name'] = 'first name 1';
$datas[1]['name'] = 'name 2';
$datas[1]['user']['first']['name'] = 'first name 2';
$datas[1]['user']['last']['name'] = 'first name 2';

array(2) {
  [0]=>
  array(2) {
    ["name"]=>
    string(6) "name 1"
    ["user"]=>
    array(2) {
      ["first"]=>
      array(1) {
        ["name"]=>
        string(12) "first name 1"
      }
      ["last"]=>
      array(1) {
        ["name"]=>
        string(12) "first name 1"
      }
    }
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(6) "name 2"
    ["user"]=>
    array(2) {
      ["first"]=>
      array(1) {
        ["name"]=>
        string(12) "first name 2"
      }
      ["last"]=>
      array(1) {
        ["name"]=>
        string(12) "first name 2"
      }
    }
  }
}
PHP将解析字段名中带有[]符号的字段,以避免产生错误的结果,我认为这种方式是使表单名类似,但我无法理解最后一个过程
要将用户名转换为$data[$i]['user']['first']['name'],您需要使用explode将字符串转换为数组,并使用array_reverse将其反转,然后使用array_REDUCT创建目标结构数组

$str = "user-first-name";
$arr = array_reverse(explode('-', $str));
$newArr = [array_reduce($arr, function($carry, $item){
    return !count($carry) ? [$item => 'value'] : [$item => $carry];
})];
结果

Array
(
  [0] => Array
    (
      [user] => Array
        (
          [first] => Array
            (
               [name] => value
            )

        )
    )
)

检查

中的实时结果是否需要详细说明?为什么要使用此阵列?您想如何获取嵌套项的值?很抱歉,我的问题变得更加清晰,直到非常不清楚您实际想要什么。“字段名是通过设置生成的”-确切的意思是什么?你不能改变他们吗?或者您想更改它们,以立即获得所需格式的数据?“但是我想不出将用户名转换为$data[$I]['user']['first']['name']”的最后一个过程-您是否只想将给定标识符的用户名拆分为三个部分,然后从中动态生成['user']['first']['name']?使用explode、introde和一些字符串连接,这将是非常简单的。但是亲爱的@mohammed,如何将它转换为$datas['user']['first']['name']='first name 1'$数据['user']['last']['name']='last name 1'@Chan I wrapped array_使用[]减少为数组创建索引0。因此,删除[]以删除索引0
Array
(
  [0] => Array
    (
      [user] => Array
        (
          [first] => Array
            (
               [name] => value
            )

        )
    )
)