0

我正在尝试处理表单的提交结果,其中包含许多员工的数据。表单输入的名称类似于“employees[1]_firstName”,需要映射到 PHP 变量 $companydata->employees[1]->firstName

填充 $_POST 数组时,PHP 看到方括号,并尝试创建一个多维数组,但出错了(忽略左括号后的所有内容)

这复制了 $_POST 但没有损坏的数组键:请注意,我已经取出了一个 foreach 循环来简化问题。

$post_data = explode('&', file_get_contents("php://input"));
// Result: $post_data = array('employees%5B1%5D_firstName=Timothy'

list($key, $value) = explode('=', $post_data[0]);
$key = urldecode($key);
$value = urldecode($value);
// Result: $key = 'employees[1]_firstName',  $value = 'Timothy'

但是,当我尝试使用可变变量时出现问题:

$post_key_parts = explode('_', $key);
// Result: $post_key_parts = array([0] => 'employees[1]', [1] => 'firstName')

$Companydata->$post_key_parts[0]->$post_key_parts[1] = $value;
// Expected result: Element [0] in array $employees => 'Timothy'

实际结果是名称中带有方括号的变量'$employees[0]',并且$employees 数组没有变化。在 {$post_key_parts[0]} 周围加上大括号并没有帮助。

我正在尝试找到一个灵活的解决方案,该解决方案也适用于不同长度的名称,例如:employees[0]_address_lines[2] 或 employees[0]_addresses[1]_postcode

我很高兴避免变量变量的罪恶,但我想不出一种优雅的方式来使用正则表达式或类似的东西。

4

1 回答 1

1

我建议您更改输入的名称。利用 PHP 的内置功能。[]为您创建一个数组,然后使用数组,因为您打算使用它们。

我有同样的问题并想出了这个:

//HTML part
<input name="employee_firstName[]">
<input name="employee_address[]">

//PHP part
<?php
$info = array("firstName", "address")
foreach ($info as $i) {
    foreach ($_POST["employee_".$i] as $k => $v) {
        $companydata->employees[$k]->$i = $v;
    }
}
?>

注意我不认为你可以为之类的事情做到这一点employees[0]_address_lines[2]。或者也许尝试employees[0][address_line][]将它用作数组,但我不确定它是否有效。

于 2012-06-20T12:04:30.543 回答