未定义的变量当值为空时

时间:2018-09-12 06:52:19

标签: php

我有2个代码块。...

//第一个区块

<div id="a1">
<?php

if (is_array($new_array) || is_object($new_array))
{
  foreach ($new_array as $name => $val)
   {
     echo $name . " : " . $val[0] . " , " . $val[1]. " , " . $val[2];
   }
}
unset($new_array);
?>
</div>

第二个区块

<div id="a2">
    <?php

    if (is_array($new_array) || is_object($new_array))
    {
      foreach ($new_array as $name => $val)
       {
         echo $name . " : " . $val[0] . " , " . $val[1]. " , " . $val[2];
       }
    }
    unset($new_array);
    ?>
    </div>

第一块或第二块将在一天之内给出空结果。意思是如果今天,第一块将给出空结果,明天第二块将给出空结果。

问题

今天,第二个块的值是空的,它给出了注意:未定义变量:new_array 错误,所以我在第二个代码块之前对此进行了初始化:

$new_array=''; 

它工作正常。...但是明天第二块代码将给出此结果:

警告:字符串偏移量非法, 致命错误:未捕获错误:无法将字符串偏移量用作数组

因此,我需要删除此代码:$new_array='';在第二个块之前&我需要放置在第一个块之前.....

5 个答案:

答案 0 :(得分:7)

如何使用if (isset($new_array)) {...}或将其初始化为数组$new_array = [];

您可以将isset添加到其他检查中,例如:

if (isset($new_array) && (is_array($new_array) || is_object($new_array))) { .... }

有关isset()

的更多信息

答案 1 :(得分:1)

您可以使用isset()函数检查$ new_array是否设置。如下编辑代码

// 第一个区块

<div id="a1">
<?php
  if(isset($new_array)){
    if (is_array($new_array) || is_object($new_array))
    {
       foreach ($new_array as $name => $val)
       {
          echo $name . " : " . $val[0] . " , " . $val[1]. " , " . $val[2];
       }
    }
  }
  unset($new_array);
?>
</div>

// 第二个区块

<div id="a2">
<?php
  if(isset($new_array)){
    if (is_array($new_array) || is_object($new_array))
    {
       foreach ($new_array as $name => $val)
       {
          echo $name . " : " . $val[0] . " , " . $val[1]. " , " . $val[2];
       }
    }
  }
  unset($new_array);
?>
</div>

答案 2 :(得分:1)

您正在寻找isset() / empty(),也许是简短的if/else

示例:

<div id="a1">
<?php

if (is_array($new_array) || is_object($new_array))
{
  foreach ($new_array as $name => $val)
   {
     echo $name . " : " . $val[0] . " , " . $val[1]. " , " . $val[2];
   }
}
unset($new_array);
?>
</div>

比方说$new_array未设置/未设置数组/未设置和对象。您的if语句将不会继续,因为它将收到false

如果您希望始终执行代码,则可以执行以下操作:(请参阅注释以获取解释)。

<div id="a1">
<?php

$new_array = []; // [] = short for array();. $new_array will now always be an array.

// You could also do something like this:
$new_array = (! is_array($new_array)) ? $new_array = [] : $new_array; // Here you say $new_array is always set with his code and else it will be an empty array.


if (is_array($new_array)) // 
{
  foreach ($new_array as $name => $val)
   {
     echo $name . " : " . $val[0] . " , " . $val[1]. " , " . $val[2];
   }
}
unset($new_array);
?>
</div>

答案 3 :(得分:1)

您可以先检查数组是否存在。如果存在,则检查它是否为空(如果它是一个数组)或计数其中的元素数大于零(如果是对象数组)

<div id="a1">
<?php
if (is_array($new_array) || is_object($new_array)) {
    if (isset($new_array)) {
        if (empty($new_array) || count($new_array) > 0) {
            foreach ($new_array as $name => $val) {
                echo $name . " : " . $val[0] . " , " . $val[1] . " , " . $val[2];
            }
        }
    }
}
unset($new_array);
?>
</div>

答案 4 :(得分:0)

php 7中的

数据类型不匹配会导致此错误。 代替

$new_array=''; 

一样初始化
$new_array=array(); 

一旦取消设置,它就会破坏该数组。因此在第一个块代码之前对其进行初始化