2011-03-29 21 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]; 
    } 
    } 
}