簡體   English   中英

Foreach一個數組來檢查鍵的值是否為空

[英]Foreach an array to check if the value of a key is not empty

我有一個像這樣的數組

$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意味着缺少value2,我也沒有收到錯誤。

我如何實現我想要的?

當我這樣做:

<?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

哦,這會做到的! 這會將值鍵對添加到新數組中。

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

我會檢查是否設置了全局$ _GET var然后遍歷這些值。

編輯:如果它們被設置,則推送使用VARR(這會將值推送到數組並為其賦值value1,value2等。

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

你的foreach()循環只掃描給定的值,而不是預期的值。 您需要定義期望值並執行如下循環:

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

empty()也執行isset()。

因此,如果密鑰丟失,則empty()不會導致錯誤。 它驗證為TRUE,因為它是空的

你需要做一個單獨的isset()檢查,以確保密鑰在那里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM