0

多数の従業員のデータを含むフォームの送信結果を処理しようとしています。フォーム入力には、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

可変変数の罪を回避できてうれしいですが、正規表現などでそれを行うエレガントな方法は思いつきません。

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 に答える