php is_array() 在 $value[] 上测试 - 不确定为什么它不会注册为数组



我只是在做一些实验。我如何打印这个$chvalues[]或测试的值(如下所示)它是一个数组。可以按原样打印出来吗?$chvalues[](是的,我的输入字段正确定义了name=seminar等…)

$chvalues = array();
if (isset($_POST['seminar'])) {
    foreach ($_POST['seminar'] as $ch => $value) {
        $chvalues[] = $value;
        if(is_array('$chvalues[]')) {
            echo "Yes. It's an Array.";
        }
    }
}

我正在试着测试这个:

if(is_array('$chvalues[]')) { ...

我得到这个:

Fatal error: Cannot use [] for reading in...
  1. 通过使用单引号将数组读取为字符串(应该只返回false)。

  2. 您应该使用不带括号的if(is_array($chvalues))

  3. $chvalues将始终是一个数组,因为您只是在前一行以及在代码开始时在循环之前将其分配给一个数组。

也许你想检查$value,或者在循环后运行is_array()不是在运行循环之前将$chvalues初始化为数组。

[]后跟变量用于将新元素附加到变量内的数组末尾。如果你想查看数组,那就直接使用变量本身。

if(is_array($chvalues)) {
   ...

您只使用$value[]访问$value数组的"top"元素,即未设置的下一个位置,如果您愿意的话。在is_array()函数中将其更改为$chvalues。要打印数组,它取决于输出。检查print_r进行调试。也不要使用引号,因为它们使数组像字符串一样,在这种情况下(因为它们是单引号)字符串'$chvalues[]'正在被测试为数组。

这里有两个问题。首先,每次使用空括号执行$chvalues[]时,都在向数组添加一个新的空元素。所以当你这样做的时候:

if(is_array($chvalues[])) 

总是得到一个空元素,而不是数组。

你可能想要:

if(is_array($chvalues)) 

第二个问题是你不能像以前那样单引号引用'$chvalues[]'。它应该没有引号,就像我上面的第一个代码块一样。

不要使用$chvalues[],只使用$chvalues(在is_array函数中不带单引号)

$chvalues = array();
if (isset($_POST['seminar'])) {
    foreach ($_POST['seminar'] as $ch => $value) {
        $chvalues = $value;
        if(is_array($chvalues)) {
            echo "Yes. It's an Array.";
        }
    }
}

您确实需要is_array($chvalues)(在您的代码中始终为真),或者,如果您试图找出添加到$chvalues的最后一项是否为数组,则应该调用is_array($value)。如果您没有这个选项(不确定为什么不这样做),那么您可以使用is_array(end($chvalues))来测试添加到数组中的最后一个内容。不过,我要警告的是,您需要调用reset才能用foreach遍历$chvalues

当然,您也可以调用$arr = array_keys( $chvalues ); is_array($chvalues[end($arr)]);,但这会变得非常愚蠢(特别是因为我最初省略了最后一个父级)。

相关内容

最新更新