我是从字段的名称属性中获得的
name="field[a][2][b][0][c][1][field_name]"
序列化表格后,我得到了:
array('field[a][2][b][0][c][1][field_name]'=>'value')
,我需要将其转换为以下数组:
$field = array (
'a' => array (
[2] => array (
'b' => array (
[0] => array (
'c' => array (
[1] => array (
'field_name'=>'value'
)
)
)
)
)
)
);
我是否需要某种foreach函数或php可以将该字符串识别为数组?
答案 0 :(得分:4)
如果要嵌套结果,请使用parse_str()
。
$text = "field[a][2][b][0][c][1][field_name]=value";
parse_str($text, $result);
print_r($result);
输出:
Array
(
[field] => Array
(
[a] => Array
(
[2] => Array
(
[b] => Array
(
[0] => Array
(
[c] => Array
(
[1] => Array
(
[field_name] => value
)
)
)
)
)
)
)
)
答案 1 :(得分:1)
您可以使用正则表达式将括号中的值获取,然后将其简化为所需的数组:
Sub Float()
Dim Result As Single
Result = 10 / 3
MsgBox Result
End Sub
说明
在正则表达式$key = 'field[a][2][b][0][c][1][field_name]';
$value = 'value';
$matches = array();
preg_match_all('/\[([^[]+)\]/', $key, $matches);
$keys = array_reverse($matches[1]);
$result = array_reduce($keys, function ($array, $item) {
return array($item => $array);
}, $value);
中:
\[([^[]+)\]
与除左括号(一个或多个)之外的任何符号匹配([^[]+)
实际上在括号内匹配。 \[...\]
函数应使用以下数据填充preg_match_all
数组:
$matches
Array
(
[0] => Array
(
[0] => [a]
[1] => [2]
[2] => [b]
[3] => [0]
[4] => [c]
[5] => [1]
[6] => [field_name]
)
[1] => Array
(
[0] => a
[1] => 2
[2] => b
[3] => 0
[4] => c
[5] => 1
[6] => field_name
)
)
的值是完全匹配的,而$matches[0]
的值是我们的第一个也是唯一的捕获组。我们只对捕获组值感兴趣。
然后使用$matches[1]
函数,我们可以简单地以相反的顺序遍历键,然后将我们的值依次包装到数组中。
答案 2 :(得分:0)
您可以使用爆炸功能执行此操作。但是这些值之间应有空格,例如“ Hello World”,其中的值将位于Array ( [0] => Hello [1] => world )
中,但在您的情况下,就像Array ( [0] => field[a][2][b][0][c][1][field_name] )
一样,直到$ name为字符或单词。
$name="field[a][2][b][0][c][1][field_name]"
$name_array = explode(" ",$name);
print_r ($name_array);
答案 3 :(得分:0)
这是您的解决方案: https://codebrace.com/editor/b06588218
我使用过两次正则表达式匹配来匹配变量名和数组
/[(.+?)]/
匹配数组中“?”的任何值是惰性匹配。
在遵循正则表达式时
/^[^[]+/
与变量名称匹配。
我用variable variables从上面的正则表达式提取的字符串中创建变量
结果:
Array
(
[a] => Array
(
[2] => Array
(
[b] => Array
(
[0] => Array
(
[c] => Array
(
[1] => Array
(
[field_name] => value
)
)
)
)
)
)
)
我希望这对您有帮助
答案 4 :(得分:0)
使用此测试代码在我的PHP服务器上测试问题时
<form method="post">
<input type="text" name="field[a][2][b][0][c][1][field_name]">
<input type="submit" value="OK">
<form>
<pre>
<?php
if (isset($_POST['field']))
print_r($_POST['field']);
?>
</pre>
我收到以下答复(在文本框中输入单词“ hello”并单击“确定”按钮之后):
Array ( [a] => Array ( [2] => Array ( [b] =>
Array ( [0] => Array ( [c] => Array ( [1] =>
Array ( [field_name] => hello ) ) ) ) ) ) )
诚然,它的格式更好,但是我是从智能手机发布的,所以请原谅我不要手动对其进行格式化。
因此,对我来说,尚不清楚为什么OP需要额外的代码来解决他/她的问题。