2011-08-19 11 views
0

愚かな質問と思われるかもしれませんが、複数のPOST変数から配列を作成する際に問題があります。それらは、任意の数の変数を持つことができるjQueryフォームから来ています。それは2つのオプション、名前または学校の1つになることができます。例えば配列内の任意の数のPOST変数

$_POST['name1']$_POST['school2']$_POST['name3']$_POST['name4']など

変数の最大数を取得し、配列に各変数を配置する方法はありますか?または、これを行うためのより良い方法がありますか?

ご了承ください。

+4

'$ _POST'は既に配列です。他に何が欲しいですか? 'name'と' school'エントリを分けたいですか? –

+0

変数の最大数はどのくらいですか? –

+0

あなたはextract()のようなものが欲しいですか? – Dan

答えて

6
<input name="name[]" /> 
<input name="school[]" /> 
<input name="name[]" /> 
<input name="name[]" /> 

で配列に変換する必要がありますあなたは何を意味するかということですか?

foreach ($_POST as $key => $val) 
{ 
    if (preg_match('/^name\d+$/',$key){ 
    // name variable 
    } else if (preg_match('/^school\d+$/',$key){ 
    // school variable 
    } 
} 
+0

はい!これは私が探しているものです。ありがとう:) – adamzwakk

+1

ところで..ポストの変数の数にはほとんど制限がありません。しかしあなたはあなたのpost_max_sizeを実行するかもしれません... – Flask

+0

こんにちは@Flask投稿変数の膨大な数があれば、それはpost_max_sizeに実行されるかもしれません。あなたはそのような問題に対処する方法をお勧めしますか?それらの巨大なポスト変数を送信するためにajaxメソッドを使用できますか? ajaxを使用してpost_max_sizeの問題を再実行しますか? –

0

、あなたが以下のように使用することができ、アレイ$_POST['name']

+0

name1、name2、...などを設定することができます。しかし、配列を使うことは、アプリケーション/データに応じてより意味をなさげることができます。例えば、常にaddress1,2、および3を持つつもりなら、配列は過度のものになります。 – Colin

+0

@コリン、私はできることは知っている、おそらくここで私の英語の問題です。今、答えがより明白であることを望みますか? – RiaD

+0

あなたの編集はそれを少しはっきりさせていますが、静的に番号付けされたポストargsがベストではないかもしれないのと同様に、配列が常に最適な解決策ではないかもしれないことを指摘していました。 – Colin

0

を取得しますPHPにこの場合は代わりにname
の変数の名前としてname[1](またはname[])を設定することができます

foreach ($_POST as $key => $value) { 
    // parse key names/etc 
} 

これでしょうあなたはすべての投稿の引数を通過することができます。しかし、潜在的なセキュリティリスクがあることに注意してください。キー/名前を非常に慎重に投稿することを検証する必要があります(ただし、常にこれを行うべきです)。

0

school[]name[]のような入力フィールド名を使用してフォームを送信してください。これらは正しく$_POST

0
:次に、賢明な参照 PHP Form Arrays、あなたは今、あなたがそれらをナンバリングしている場合は、$ _POST変数にforeachのを使用することができ、また $_POST['name']の配列と
foreach ($_POST['name'] as $name) 
{ 
    // each form element from the `name[]` inputs = $name 
} 
foreach ($_POST['school'] as $school) 
{ 
    // each form element from the `school[]` inputs = $name 
} 

$_POST['school']

を持っています

count($_POST)を呼び出すことによって、$_POST配列内の要素を数えることができます。

しかし、はい、jQueryの経由変数を渡すのより良い方法があります:

jQuery.post('/your/url/here', { 
    'name': ['Tom', 'Jerry', 'Garfield'], // passing array... 
    'school': ['MIT', 'UCLA', 'Florida State University'] // ...and another one 
}, function(data){ 
    // your callback here 
}); 

は、あなたが(PHPで)そのようなデータの特定の部分をカウントすることができるようになります:

$number_of_names = count($_POST['name']); // $_POST is multidimensional array 
$number_of_schools = count($_POST['school']); 

またはあなたがそれら(まだPHPで)を表示することができます

echo 'names: ' . implode(', ',$_POST['name']) . PHP_EOL; 
echo 'schools: ' . implode(', ',$_POST['school']) . PHP_EOL; 

それは助けていましたか?

0

私は今あなたが何を意味していると思います。誰もが推奨されている形態での入力は、最高のだろう変更

$myNames = Array(); 
for($i=0; $i<1000; $i++){ 
if(!isset($_POST["school$i"])): 
    break; 
$myNames += $_POST["school$i"] 
} 
0

:彼らは他のいくつかの基礎となる機能

単純に支障がない限り

$options = Array("school" => Array(), "names" => Array()); 
$i = 0; 
foreach($options as $key => $val){ 
    while(isset($_POST[$key.$i]) && ++$i){ 
     $options[$key] += $_POST[$key.$i]; 
    } 
} 

フォームアレイは、より良い選択肢かもしれません。何らかの理由でそれが実現できない場合は、手動で配列を作成する必要があります:

$base_names = array('name' => array(), 'school' => array()); 
foreach ($_POST as $key => $value) { 
    $key = preg_replace('/\d+$/', '', $key); 
    if (isset($base_names[$key])) { 
     $base_names[$key][] = $value; 
    } 
}