2011-10-05 7 views
0

変数が設定されているかどうかを調べたい。 PHPのisset()関数(つまり、isset($ myVariable))は通常、変数の設定状態を私に提供しますが、変数を式として参照したいのですが、それは可能でしょうか?もしそうなら、どうすればいいのですか?

少しより多くのコンテキストと詳細:NNNが整数(実際にはファイルID番号)である、それぞれが「DeleteFileButtonNNN」という名前のHTMLフォームに複数の画像送信ボタンがあります.NNN = 2に関連付けられたボタンをクリックすると、 ($ _POST ['DeleteFileButton1_x'と$ _POST ['DeleteFileButton3_x']は設定されません)。$ _POST配列を順番にループできます。

私は簡単にループの境界を作成することができます。すべての可能なファイルID(つまり、 NNN値)は、MySQLテーブルに格納されます。私の助けが必要です $ _POST配列の配列要素インデックスとして様々なDeleteFileButtonNNN要素を指定する方法です。参照は式(例えば 'DeleteFileButton'、$ anInteger .'_ x 'などの文字列連結)でなければならないので、 )。しかし、私はPHPが$ _POST配列を$ _POST [$ someVariable]として参照することを許しているとは思っていません。

誰かが私を助けてくれますか?前もって感謝します。

+0

これらの有益で創造的な応答のために何千もありがとう! –

答えて

1

PHPは、あなたが最も確実に行うことができますので、あなたは、配列を参照するために整数または文字列にダウンデボルブものを使用することができますよく:

$_POST["someprefixstring_$x"]; // exactly the same as $_POST['someprefixstring_a']; 
+0

Marc Bの答えは、PHPが$ _POST(または他の)配列への非リテラル参照をサポートしていないと仮定してsuccintly私のエラーを示しました。ありがとうございました。答えが他の回答者にもありがたいので、私にとって有用な多くの配列処理関数についての洞察が得られました。 –

2

質問には適切ですが、@ cwallenpooleの回答は問題ではなく、問題の方が良いです。


質問が正しく理解されている場合は、array_key_exists($key, $_POST)を$ _POSTに使用できます。

また、正しい値を返す限り、別の変数を$ _POSTのキーとしてアクセスすることもできます。例えば:

function x() { 
    return "a"; 
} 

$x = 'a'; 

$val = $_POST[x()]; 
$val = $_POST[$x]; 
$val = $_POST['a']; 
$val = $_POST[chr(ord('a'))]; 

「複合」キーとして許可されています。

$key = 'DeleteFileButton2_x' 
$value = $_POST[$key] 
4

ええと。代わりに配列アクセスを使用します。

<input type="checkbox" name="deleteFileButton[0]" /> 
<input type="checkbox" name="deleteFileButton[1]" /> 
<input type="checkbox" name="deleteFileButton[2]" /> 

第一及び第三の項目は、上記のチェックをしている場合は、$_POST['deleteFileButton']を反復処理するとき、あなたは0と2の値を取得していないでしょう。1.

foreach($_POST['deleteFileButton'] as $key => $val) 
     print "$key was clicked." 

のためならばあなたは連想配列(例えばdeleteFileButton[myKey])に変更することができ、$ valに意味のある値が入るように入力の値を設定することができます。


あなたは<key>_<index>があなたの唯一のオプションであることを感じた場合、あなたは他のポスターが示唆されているようissetまたはarray_key_existsを使用することができますが、どこか別の場所に格納することなく、事前の最大入力値を知る方法がありません。 。率直に言って、それは配列を使うより効率的であまりエレガントではありません。

1
<input name="asd[]" value="a"> 
<input name="asd[]" value="b"> 
<input name="asd[]" value="c"> 
<input name="asd[]" value="d"> 

<?php 
foreach($_POST['asd'] as $key => $value) 
    echo $_POST['asd'][$key]; 
?> 
1

最初私は、PHPを使用して、$ _POST [$ someVariable]として$ _POST配列を参照することが可能だと思います。簡単な実装では、隠しフィールドの値を隠しフィールドの値に置き換えるフォームを送信する前にjavascriptを使用し、PHPページでは操作を実行するイメージのIDとして隠し入力を取得するこれはif-else構造の多くを節約します

関連する問題