2

FormStack を作成中のスクリプトに POST データを取得して、自分の MySQL データベースに挿入できるようにしようとしています。データを取得して、次のような配列に解析できます。

Array
(
  [FormID] => 1111111
  [UniqueID] => 222222
  [name_field1] => first = FirstName last = LastName
  [address_field1] => address = 123 Street Name address2 = Suite 1000 city = Exampleville state = WY zip = 12345
  [random_field] => random text
  [name_field2] => first = FirstName last = LastName
  [address_field2] => address = 123 Street Name address2 = Suite 1000 city = Exampleville state = WY zip = 12345
)

問題は、name_fields と address_fields のフォーマット方法です。以前に多次元配列を含む POST データを持つフォームを作成したことがありますが、これはそれとは異なる形式になっています。私はそれを検索して検索して遊んでみましたが、そのデータを独自の配列に入れることができましたが、それは私が望むよりもはるかに多くのコードであり、すべての名前フィールドとすべてのアドレスフィールドに複製する必要があります. 名前と住所フィールドの個々の部分に対処するためのより簡単な方法が欠けているように感じます. それとも、見た目ほど退屈ですか?

ありがとう

4

1 に答える 1

0

これはおそらく最もエレガントな解決策ではありませんが、解決策を思いつくことができてうれしいです. これが私が思いついたものです:

foreach ($_POST as $key => $value) {
    if (preg_match("/address2 = /", $value)) {
        $search = array("address2 = ", "city = ", "state = ", "zip = ");
        $addr_step1 = str_replace($search, "|", $value);
        $addr_step2 = str_replace("address = ", "", $addr_step1);
        $addr_step3 = explode("|", $addr_step2);
        $addr_keys = array("Address", "Address2", "City", "State", "Zip");
        $value = array_combine($addr_keys, $addr_step3);
    } elseif (preg_match("/address = /", $value)) {
        $search = array("state = ", "zip = ");
        $addr_step1 = str_replace($search, "|", $value);
        $addr_step2 = str_replace("city = ", "| |", $addr_step1);
        $addr_step3 = str_replace("address = ", "", $addr_step2);
        $addr_step4 = explode("|", $addr_step3);
        $addr_keys = array("Address", "Address2", "City", "State", "Zip");
        $value = array_combine($addr_keys, $addr_step4);
    } elseif (preg_match("/first = /", $value)) {
        $name_step1 = str_replace("last = ", "|", $value);
        $name_step2 = str_replace("first = ", "", $name_step1);
        $name_step3 = explode("|", $name_step2);
        $name_keys = array("FirstName", "LastName");
        $value = array_combine($name_keys, $name_step3);
    }
    ${'f' . $key} = $value;
}

その最後のビット${'f'.$key} = $value;は、各フィールドにアドレス指定する変数を与えることです (FormStack に数値フィールド名を使用させているため、先頭に「f」を追加しています)。では、例えばこんな感じで・・・

echo "$f12345678[City], $f12345678[State]";

私に見せるだろう...

New York, NY
于 2013-03-06T18:05:02.300 に答える