2010-12-20 83 views
5

我的一个大学的is_array似乎有一个“未定义指数”的错误在我写

我这个代码看起来像这样的代码:

if (is_array ($arr['key'])) 

我的目的是检查$ ARR是否有一个名为“钥匙”键,如果该键的值是数组本身。我应该这样做:if(isset($arr['key']) && is_array ($arr['key']))

也许以下是等价的: 假设$ var没有设置。那么,is_array($ var)会导致错误还是只返回false?

谢谢

回答

6

是的,使用isset,然后is_array

if(isset($arr['key']) && is_array($arr['key'])) { 
    // ... 
} 

因为PHP使用短路逻辑评估,将停止其到达之前is_array(),所以你永远不会得到一个错误。

2

尝试:如果

is_array($arr) && array_key_exists('key', $arr) 
+0

这不回答我的问题,但它不是足够清楚。编辑它,请再看一看 – shealtiel 2010-12-21 00:07:23

+0

如果它不是**,它会发出通知。你可以做的是先检查'isset($ arr)&& is_array($ arr)'。 – ncuesta 2010-12-21 00:12:50

0

检查它首先存在,那么如果一个数组。否则,你仍然会得到同样的错误。

if (isset($arr['key'])) { 
    if (is_array ($arr['key']) { 

    } 
} 
+2

为什么不在同一个语句中:if(isset($ arr ['key'])&& is_array($ arr ['key'])? – shealtiel 2010-12-21 00:07:45

0

也许你可以考虑从阵列的安全,恢复数据的通用的get()函数:

/* 
    Get with safety 
    @author: boctulus 

    @param array 
    @param index1 
    @param index2 
    .. 
*/ 
function get(){ 
    $numargs = func_num_args(); 
    $arg_list = func_get_args(); 

    $v = $arg_list[0]; 

    for ($i = 1; $i < $numargs; $i++) 
    { 
      if (isset($v[$arg_list[$i]])) 
      $v = $v[$arg_list[$i]]; 
     else 
      return null; 
    } 

    return $v; 
} 

用途:

$arr = []; 

var_dump(get($arr,'a','b')); // NULL 

$arr['a']['b'] = 'ab'; 
var_dump(get($arr,'a','b')); // 'ab'