Foreach一个数组来检查键的值是否为空

时间:2011-03-29 22:45:04

标签: php arrays

我有一个像这样的数组

$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,我也不会收到错误。

我如何实现我想要的目标?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

哦,这将是它! 这会将值键对添加到新数组中。

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

答案 2 :(得分:-1)

我会检查是否设置了全局$ _GET var然后遍历值。

编辑:如果设置了它们,则推送到阵列 (这会将值推送到数组并为其赋值value1,value2等。

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

答案 3 :(得分:-1)

你的foreach()循环只扫描给定的值,而不是预期的值。 您需要定义期望值并执行如下循环:

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

答案 4 :(得分:-2)

empty()也执行isset()。

因此,如果密钥丢失,则empty()不会导致错误。它验证为TRUE,因为它是空的

你需要进行单独的isset()检查以确保密钥在那里