2017-03-27 12 views
0

さまざまな入力の配列を作りたいと思います。たとえば、私のキーはサブミットボタンであり、私の配列キーはサブミットボタンに必要なものの内容になりたいと思っています。私のボタンもテキストフィールドに接続されています。php配列のキー配列の使い方

マイ最小限のコード:

<?php 

function element($submit){ 

    if ($submit == "submit"){ 
     $element = "<input type = $submit value = $submit /><INPUT type = $submit name = $submit value = $submit size=40 />"; 

    } 
    $content = $element ; 

    return $content; 


} // function element 


function main($submit){ 

//print_r ($defaults); 

    foreach ($submit as $k=>$submit){ 
     @$content .=element ($submit[$k]) . "<br />\n"; 

    } 

    return "<form action = {$_SERVER['PHP_SELF']} method = POST>\n$content</form>"; 

} 



$arr = array(
    "submit" => array("submit", "OK","text", "question", ""), 
); 

$content .= main ($arr["submit"]); 

print $content; 

だから、問題は、私はHTMLの中に私のキー配列の値を配置する方法がわからないです。多分私はそれを間違っているのだろうか?このようにするのは悪い習慣ですか?

答えて

1

これは、あなたが望むような入力を出力しています。私が変更したものといくつかの考えのコードにコメントがあります。

<?php 

//Change param to $name of the index and $data that you will usefor readability 
function element($name, $data){ 
    //Checking that we are on the right element 
    $element = ""; 
    if ($name == "submit"){ 
     //It is confusing that you have 2 inputs here. 
     //Rather than hard coding 0, 1, 2, 3, 4 there could be a name 
     //in an associative array. This is not very flexible 
     //This is string interpolation I like it more hen concatenation for 
     //Simple put this variable here 
     $element = "<input type='{$data[0]}' value='{$data[1]}' /><input type='{$data[2]}' name='{$data[3]}' value='{$data[4]}' size=40 />"; 
    } 

    //No need to do $content = $element then just return 
    //Not sure what should happen if the name does not exist... 
    //Right now it is an empty string 
    return $element; 
} 


function main($inputs){ 

    //print_r ($defaults); 

    //Create this before just using it removes a warning. 
    $content = ''; 

    //Change to $v just for clarity not sure what it will do to actual $submit. 
    //Loops the whole array not just that instances of submit. 
    foreach ($inputs as $k=>$v){ 
     $content .= element ($k, $v) . "<br />\n"; 
    } 

    return "<form action = {$_SERVER['PHP_SELF']} method = POST>\n$content</form>"; 

} 

//Changed to inputs assuming this would be more then one 
$inputs = array(
    "submit" => array("submit", "OK","text", "question", ""), 
); 

//Lets call this form you are overusing the content and it is hard to follow 
$form = main($inputs); 

print $form; 
+0

ニース、それは私のように動作します。 1つの質問:関数要素では、名前とデータの2つの変数をどのように与えるのか、配列入力とは関係ありません。これはforeachの魔法ですか?私は彼らが入力配列の値をどのように得るのかを意味します – NotsoPr0

+0

'foreach'では' parameters' '$ name'と' $ data'を持つ 'function'を呼び出す必要はありません。この関数の 'scope'のために渡すもの(この場合は' $ k'と '$ v')に関係なく、それらは' paramater'の名前で呼び出されます。 – nerdlyist

+0

ありがとう、ありがとう:) – NotsoPr0

1

PHPで.(ドット)演算子を使用して変数値を文字列に埋め込むことができます(これは一般に「文字列連結」と呼ばれます)。あなたはどのキーで(多次元)配列を(持っている場合

$element = "<input type='" . $sub[0] . "' value='" . $sub[1] . "' /><input type='" . $sub[2] . "' name=" . $sub[3] . " value='" . $sub[4] . "' size='40' />"; 

$element = "<input type='" . $btnname . "' value='" . $btnvalue . "'/><input type='" . $fieldtype . "' name=" . $fieldname . " value='" . $fieldvalue . "' size='40' />"; 

または(最初に定義する必要があります)アレイを使用して:あなたのコードのために私はこのようにそれを行うだろう、)も配列である、あなたは、このような文字列の連結を使用する必要が

$arr = array("subkey" => array($firstVar, $secondVar, [...])); 

言う:

$element = "<input type='" . $arr["subkey"][0] . "' value='" . $arr["subkey"][1] . "' /><input type='" . $arr["subkey"][2] . "' name=" . $arr["subkey"][3] . " value='" . $arr["subkey"][4] . "' size='40' />"; 

これは、より多くの配列サブキー(より多くのディメンション)でも機能します。

$_SERVER,$_GETまたは$_POSTのような配列内の文字列インデックスを使用して、整数インデックスを文字列で置き換えることもできます。

しかし、テキストフィールドに送信ボタンを接続する必要はなく、単独で存在することもできます。

+0

私のforeachループは正しいですか?その行にエラーが発生していますか? – NotsoPr0

+0

文字列連結と呼ばれます。 – nerdlyist

+0

いいえ、@nerdlyistですが、私はできるだけシンプルにしました。 –