多数の従業員のデータを含むフォームの送信結果を処理しようとしています。フォーム入力には、PHP 変数 $companydata->employees[1]->firstName にマップする必要がある "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
可変変数の罪を回避できてうれしいですが、正規表現などでそれを行うエレガントな方法は思いつきません。