php:空数组元素何时不为空?

php:空数组元素何时不为空?,php,javascript,Php,Javascript,我试图检测数组元素何时为null,但is\u null不起作用。具体来说,我将向服务器发送一些POST数据,其中发送的JavaScript对象没有任何值: $.ajax({ type: "POST", url: "comms.php", data: {practice:tab_content}, // array 'tab_content' has not been set dataType: "script" }); <pre> <?p

我试图检测数组元素何时为null,但is\u null不起作用。具体来说,我将向服务器发送一些POST数据,其中发送的JavaScript对象没有任何值:

$.ajax({
 type:     "POST",
 url:      "comms.php",
 data:     {practice:tab_content},   // array 'tab_content' has not been set
 dataType: "script"
});
<pre>
<?php

var_dump($_POST);

?>
</pre>

<form method="POST">
<input type="submit" name="submit">
<input type="hidden" name="hidden" value="">
</form>
在服务器php代码中,我需要检查“practice”是否有值。如果没有,则在使用foreach循环遍历“practice”数组时会出现错误

php代码中的print\u r$\u POST显示:

Array
(
   [practice] => null 
)
下面是我的测试程序,它检查$u POST[实践]实际上是什么:

<?php
$params = "";
if(array_key_exists("practice", $_POST))
   $params .= "array_key_exists true;";
else
   $params .= "array_key_exists false;";

if(is_null($_POST["practice"]))
   $params .= " is_null true;";
else
   $params .= " is_null false;";

if(isset($_POST["practice"]))
   $params .= " isset true;";
else
   $params .= " isset false;";

if(empty($_POST["practice"]))
   $params .= " empty true;";
else
   $params .= " empty false;";

$params .= " value is '" . $_POST["practice"] . "'.";
$output  = "document.getElementById(\"demo\").innerHTML=\"";
$output .= $params;
$output .= "\";\n";
echo $output;
?>
知道这是怎么回事吗?谢谢

编辑22:10GMT 谢谢大家,已经修好了。使用var_dump确实提供了必要的信息,正如您两位所建议的:

array(1) {
  ["practice"]=>
  string(4) "null"
}
而且,如果我修改了ajax调用以发送一个包含null的字符串,那么我得到了完全相同的效果。但这很奇怪-为什么XMLHttpRequest发送一个包含空值的n-u-l-l的完全有效字符串?这使得通过真正的n-u-l-l发送非常困难。鉴于这种混乱,我使用的是本贾姆建议的is_数组。
谢谢-喜欢这个网站:

检查is\u array$\u POST[练习],这样你就会知道它是一个数组,foreach永远不会抛出错误。

做一个var\u dump$\u POST,它会显示变量的类型、大小以及内容

基本上,\u GET/\u POST/\u请求产生的任何内容都是字符串。表单中存在但没有数据的字段将显示为空字符串。您的null值不是实际的php null,而是一个值为n-u-l-l的文本字符串

给出如下php脚本:

请注意,“隐藏”字段存在,其值为0长度字符串。这意味着:

if ($_POST["practice"] == "null") {
  ...
}

正如@racar在评论中提到的,如果某个内容来自浏览器,则数据类型始终为string,但数组post值除外,它将是一个字符串数组

如果您看到null,当您打印它时,这意味着它实际上是一个包含单词null的字符串

因此,在这里举个例子,您需要做:


你的问题到底是什么?我很难理解你想知道什么,随帖子传递的一切都是一根弦。即使nullvalue也是“null”-我觉得这不对$foo=NULL;打印-$foo-;prints-,not-null-。使用var_dump而不是print_r来获取有关所讨论的值的更多信息。您不能发送真正的null,因为数据是通过application/x-www-form-urlencoded发送的,它没有数据类型。所有参数名称和值都是字符串。如果你想发送一个真正的空值,你需要发送JSON或者其他一些有空值概念的格式。你可以从_GET/_POST/_请求中得到数组,但是在这个例子中,你是正确的。该值为字符串文本null。检查is_数组将捕获该值,并返回false。
array(2) {
  ["submit"]=>
  string(12) "Submit Query"
  ["hidden"]=>
  string(0) ""
}
array_key_exists('hidden', $_POST); -> true
isset($_POST['hidden']); -> true
empty($_POST['hidden']); -> true
is_null($_POST['hidden']); -> false
if ($_POST["practice"] == "null") {
  ...
}