我正在尝试处理表单的提交结果,其中包含许多员工的数据。表单输入的名称类似于“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
我很高兴避免变量变量的罪恶,但我想不出一种优雅的方式来使用正则表达式或类似的东西。