我有一个像这样的数组
$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,我也不会收到错误。
我如何实现我想要的目标?
答案 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()检查以确保密钥在那里