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
)
)
)
)