2011-03-29 54 views
3

我有一個是這樣的的foreach數組來檢查,如果鍵的值不爲空

$array = array('key1' => $_GET['value1'], 'key2' => $_GET['value2']); 

我要檢查如果鍵的值不爲空數組。假設用戶訪問網頁並請求此 http://mysite.com/page.php?value1=somevalue&value2=這意味着value2爲空或表示它從查詢字符串中缺少,我希望能夠檢查它是否存在並且不爲空。

我想這

foreach($array as $key => $value) 
{ 
    if(empty($value)) 
    { 
     //spout some error 
    } 
} 

但即使我進入這個http://mysite.com/page.php?value1=somevalue含義值2缺失,我不明白的錯誤。

我如何實現我想要的?

+2

[我不相信你](http://codepad.org/u85hIz4x)你的代碼不起作用。你確定你沒有在別的地方犯過錯嗎?另外,請接受您之前的一些問題的答案;這是一個社區,而不是免費的。五個問題,並沒有接受是絕對不行! – 2011-03-29 22:54:18

+0

我從來不知道我不得不接受一些東西......我甚至不知道該接受什麼。 – dikidera 2011-03-29 22:58:21

+0

@mcfe - 如果您有回答「回答」您的問題,請點擊您接受的答案左側勾選的複選標記。這是禮貌。 – 2011-03-29 23:00:31

回答

2

當我這樣做:

<?php 

$array = array('key1' => $_GET['value1'], 'key2' => $_GET['value2']); 

foreach($array as $key => $value) 
{ 
    if(empty($value)) 
    { 
     echo "$key empty<br/>"; 
    } 
    else 
    { 
     echo "$key not empty<br/>"; 
    } 
} 

?> 

有了:

http://jfcoder.com/test/arrayempty.php?value1=somevalue

編輯:這 - http://jfcoder.com/test/arrayempty.php?value1=somevalue&value2=

我得到:

key1 not empty 
key2 empty 

我想你需要給更多的上下文你對實際使用中的問題,因爲可能有一些其他的細節把它扔了。

編輯

這沒有任何意義,但是這是在評論規定:

$array = array(
    'key1' => '".mysql_real_escape_string($_GET['value1'])."', 
    'key2' => '".mysql_real_escape_string($_GET['value2'])."' 
); 

這實際上不分析由於單引號被用在混合單引號字符串,事實上,即使它解析了,也會將數組片段設置爲等於文字字符串,而不是函數結果。

我推測,也許是:

$array = array(
    'key1' => "'".mysql_real_escape_string($_GET['value1'])."'", 
    'key2' => "'".mysql_real_escape_string($_GET['value2'])."'" 
); 

這將表明一個字符串總是被退回,這是至少'',這絕不會是空的,由於單引號。

考慮PDO

+0

是的,我其實也這樣做 $ array = array('key1'=>'「.mysql_real_escape_string($ _ GET ['value1'])。'','key2'=>'」.mysql_real_escape_string($ _ GET [ '值'])'「)。 – dikidera 2011-03-29 22:56:43

+0

@mcfe - 您需要將它添加到您的問題。 – 2011-03-29 22:58:10

+0

@mcfe:對,實際上,你的問題根本不代表你的情況。 'mysql_real_escape_string'需要並使用數據庫連接;你確定你的意思嗎?你有沒有print_r($ array)'來檢查它的內容是否與你認爲應該是相符的? – 2011-03-29 22:59:00

-2

empty()也執行isset()。

因此,如果缺少密鑰,empty()不會導致錯誤。它驗證爲真實的,因爲它是空

,你需要做一個單獨的isset()函數檢查,以確保關鍵是有

+0

您能否舉個例子,因爲我無法理解這個 – dikidera 2011-03-29 22:49:26

+0

的邏輯您正在將$ _GET直接設置到數組中。執行isset($ _ GET ['key'])檢查以確保密鑰存在。 – Jase 2011-03-29 22:50:43

+0

-1鑰匙不會丟失;他手動創建該數組。 – 2011-03-29 22:52:08

-1

我會檢查,看看如果全球$ _GET變種設置然後依次通過價值。

編輯:PUSH GET VARS ONTO ARRAY如果將它們設定 (這將值推到一個數組併爲其分配值1,值等

if (isset($_GET)) { 
    foreach ($_GET as $get) { 
    if ($get != '') { 
     $new_array['value'.$i] = $get; 
     ++$i; 
    } 
    } 
} 
+1

我引自上面'http://mysite.com/page.php?value1=somevalue的意思是value2缺失'這意味着通過'$ _GET'變量不會幫助他在最低位.. – Neal 2011-03-29 22:52:18

+0

根據問題,_value2是空的或...從查詢字符串_中缺少,如果它缺失,這將不起作用。 – Wrikken 2011-03-29 22:52:42

+0

哦,我看到他手動創建陣列。 – 2011-03-29 22:54:03

-1

你的foreach()循環只掃描給定的值,而不是預期的值。 您需要定義的預期值,並做一個循環是這樣的:

foreach($expected_keys as $key) { 
    if ((!isset($array[$key])) || empty($array[$key])) { 
     //spout some error 
    } 
} 
+0

-1不,他用期望的鍵填充數組'$ array'。 – 2011-03-29 22:59:20

0

哦,這將做到這一點! 這會將值密鑰對添加到新陣列。

if (isset($_GET)) { 
    $get_keys = array_keys($_GET); 
    foreach ($array_keys as $k) { 
    if ($_GET[$k] != '') { 
     $new_array[$k] = $_GET[$k]; 
    } 
    } 
}