【发布时间】:2012-06-20 11:46:56
【问题描述】:
我正在尝试处理表单的提交结果,其中包含许多员工的数据。表单输入的名称类似于“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
我很高兴避免变量变量的罪恶,但我想不出一种优雅的方式来使用正则表达式或类似的东西。
【问题讨论】:
-
我知道变量 variable 有点 hacky,但坦率地说,我很惊讶 PHP 允许在变量名中使用方括号(和花括号),只要它们是以这种方式创建的。
标签: php arrays forms variables