2015-03-02 47 views
0

我有一個看起來像這樣的形式:麻煩來自多個領域的數據轉換成一個陣列

<form name="search" method="post" action="http://example.com/search3/"> 
Seach for: <input type="text" name="find[]" /> 
Search for stories by Type 
<select name="find[]"> 
<option value="Fiction" selected>Fiction</option> 
<option value="Non-Fiction">Non-Fiction</option> 
<option value="Essay">Essay</option> 
</select> 
<input type="submit" name="search" value="Search" /> 
</form> 

上php.search,我通過獲取數據:

$input = array(
"find" => $_POST['find'], 
); 

這幾乎是工作,除非它不將結果放在find數組中。相反,數據將進入array2的結果,可能是b/c,我將每個字段命名爲find []。這裏是var_dump:

array(1) { 
["find"]=> 
array(2) { 
[0]=> 
string(5) 「testing1」 
[1]=> 
string(7) 「testing2」 
} 
} 

我不知道爲什麼我在這種情況下留下查找數組空白。

如果我改變表單,所以查找[]名稱作爲數組變得只是找到, 然後我得到的數據進入名爲查找像我想要的數組,然而,只有選擇表單數據將被捕獲。見的var_dump的結果,我怎麼只得到一個結果,而不是兩個:

array(1) {
 
["find"]=>
string(7) 「testing2」
 
} 

所以,問題是...... 我怎樣才能得到輸入和選擇查找數組中捕獲的數據?

+0

設置多dimenstional陣列,'找到[ '輸入'] []'和'找到[ '選擇'] []' – 2015-03-02 07:04:40

+0

我這樣做,在搜索中。 PHP代替$ input = array( 「find」=> $ _POST ['find'], );你意思是? – Cary5000 2015-03-02 07:09:40

回答

0

當使用方括號[]命名字段時,PHP會自動在$_POST(或$_GET)數組中創建一個嵌套數組。

在你的情況下,$ input ['find']的值是一個有兩個數字鍵的數組。

echo $input['find'][0]; 
echo $input['find'][1]; 

您可以假定索引0包含在文本輸入中輸入的值,索引1包含列表中選定的值。

如果跳過字段名squre支架,瀏覽器將它們發送到服務器,如下所示:

find=value1&find=value2 

PHP,解析數據時,首先存儲value1下的關鍵find,但當另一find關鍵發生時,它會用新的value2覆蓋之前的值。

+0

是的,我嘗試跳過方括號,當我做這兩個回聲時,我得到「Fi」。我認爲這些是「小說」這個詞的前兩個字母,它是選擇字段的默認值 – Cary5000 2015-03-02 07:15:10

+0

如果我擺脫了正方形(將名稱設置爲數組),那麼選擇數據會像您所說的那樣覆蓋輸入數據,所以這就是爲什麼我沒有這樣做。但是關於我上面做了什麼,對於如何將兩個值存儲在一個數組中,您有任何想法嗎?或者您是否說過我必須具有嵌套數組才能捕獲這兩個值? – Cary5000 2015-03-02 07:20:13

+0

至少它在我上面的代碼中有效。由於數據位於數組(2)中,因此我無法使用該空查找數組引用數據。但是我不得不在查詢中傳遞這些數據,因爲它沒有名字?像輸入[] []? – Cary5000 2015-03-02 07:30:20

0

試試這個,這會對你有幫助。

字段的名稱不應該相同。

<form name="search" method="post"> 
 
    Seach for: <input type="text" name="search" /> 
 
    Search for stories by Type 
 
    <select name="find[]" multiple> 
 
    <option value="Fiction" selected>Fiction</option> 
 
    <option value="Non-Fiction">Non-Fiction</option> 
 
    <option value="Essay">Essay</option> 
 
    </select> 
 
    <input type="submit" name="submit" value="Search" /> 
 
</form> 
 

 
<?php 
 
if(isset($_POST['submit'])){ 
 
    $input=array("find"=>$_POST['search'],'search'=>$_POST['find']); 
 
    print_r($input); 
 
} 
 

 
?>

+0

這只是返回null。我嘗試過,就像這樣,並試圖通過編輯第二部分來找到'find'=> $ _ POST ['search']。無論哪種方式沒有運氣。 – Cary5000 2015-03-02 07:27:13

+0

如果你沒有填寫輸入文本框,那麼它肯定會返回null。填寫文本字段並從下拉列表中選擇選項。你會得到包含兩個數組的多維數組。 喜歡這個:Array([find] => Hello [search] => Array([0] => Fiction [1] => Essay)) – 2015-03-02 07:33:35

+0

是的,我明確填寫了文本字段並有一個選擇字段值太。它只是給了空,然後去代碼說消息你忘了輸入搜索詞 – Cary5000 2015-03-02 07:36:56

0
<form name="search" method="post" action=""> 
Seach for: 
Search for stories by Type 
<select name="find[]"> 
<option value="Fiction" selected>Fiction</option> 
<option value="Non-Fiction">Non-Fiction</option> 
<option value="Essay">Essay</option> 
</select> 
<input type="text" name="find[]" /> 
<input type="submit" name="search" value="Search" /> 
</form> 
<?php if(isset($_POST)){ 
    $input = array(); 
    $var =array(); 

    foreach ($_POST['find'] as $key => $value) { 
     if(!empty($value)) { 
      array_push($var, $value); 
     } 
     else{ 
      continue; 
     } 
    } 
    $input = array(
"find" => $var, 
); 
    print_r($input); 
} 
+0

好主意。但是當我運行該代碼和的var_dump我得到這個錯誤和結果:警告:提供的foreach無效的參數() 陣列(1){ [ 「找到」] => 陣列(0){ } } – Cary5000 2015-03-02 07:33:08

+0

如果(isset($ _ POST ['find'])&&!empty($ _ POST ['find']))if(isset($ _ POST)) – ABIRAMAN 2015-03-02 07:37:23

+0

謝謝。得到它與我現有的代碼在我的問題,只參考$ q = ['find'] [0]等值 – Cary5000 2015-03-02 07:55:57