2011-01-28 11 views
0

私はPHPにこのASPコードを変換しようとしました、そしてそれが正しいかどうかを知りたい:この変換は正しいですか?

ASP:

Set emp = Server.CreateObject("Scripting.Dictionary") 

EM_GENERAL=0 
EM_AUDIO=1 
EM_VIDEO=2 

emp.Add EM_GENERAL, "General" 
emp.Add EM_AUDIO, "Audio" 
emp.Add EM_VIDEO, "Video" 

For each em in Emp 
Response.Write "<option value=" + CStr(em) 
If em = CInt(IT_FIELD) Then 
    Response.Write " selected" 
End If 
Response.Write ">" 
Response.Write Emp.Item(em) 
Next 

PHP:VB、For Each

$EM_GENERAL=0; 
$EM_AUDIO=1; 
$EM_VIDEO=2; 

$emp = array(); 
$emp[$EM_GENERAL] = "General"; 
$emp[$EM_AUDIO] = "Audio"; 
$emp[$EM_VIDEO] = "Video"; 

foreach ($emp as $em) { 
    echo "<option value=" + ($em); 
    if ($em == intval($IT_FIELD)) { 
    echo " selected"; 
    } 
    echo ">"; 
    echo $em; 
} 
+2

をあなたのチェックはするのと同じくらい簡単です:彼らは同じ出力を生成しますか?もしそうなら、それは正しい。あなたはまた、(どちらの場合も)ひどく形成されたHTMLを出力しています。 '

+0

コードレビューについては、http://codereview.stackexchange.com/ – Htbaa

答えて

0

ループは値ではなくディクショナリキーを反復するので、ASPコードでは、emはempエントリの数値キーです。 PHPではforeachが値を反復処理するため、$emはキーではなく値です。 if ($em == intval($IT_FIELD))のチェックは期待どおりに機能しません。幸いにもPHPのforeachループは、foreach ($array as $key => $value)の構文もサポートしています。ここで$valueDictionary.Item(key)に相当します。

は、代わりにこれを試してみてください:

foreach ($emp as $em => $value) { 
    echo "<option value=" + ($em); 
    if ($em == intval($IT_FIELD)) { 
    echo " selected"; 
    } 
    echo ">"; 
    echo $value; 
} 
+0

ありがとうございます。配列の部分は正しいですか? – input

+1

はい、これはうまくいきますが、同じ効果でこれを変更することもできます(指定しないと、PHPは0から始まるインデックスを作成します)。$ emp = array(); $ emp [] = "一般"; $ emp [] = "Audio"; $ emp [] = "ビデオ"; –

+0

ありがとうございます。感謝。 – input