我的一个大学的is_array似乎有一个“未定义指数”的错误在我写
我这个代码看起来像这样的代码:
if (is_array ($arr['key']))
我的目的是检查$ ARR是否有一个名为“钥匙”键,如果该键的值是数组本身。我应该这样做:if(isset($arr['key']) && is_array ($arr['key']))
?
也许以下是等价的: 假设$ var没有设置。那么,is_array($ var)会导致错误还是只返回false?
谢谢
我的一个大学的is_array似乎有一个“未定义指数”的错误在我写
我这个代码看起来像这样的代码:
if (is_array ($arr['key']))
我的目的是检查$ ARR是否有一个名为“钥匙”键,如果该键的值是数组本身。我应该这样做:if(isset($arr['key']) && is_array ($arr['key']))
?
也许以下是等价的: 假设$ var没有设置。那么,is_array($ var)会导致错误还是只返回false?
谢谢
是的,使用isset
,然后is_array
。
if(isset($arr['key']) && is_array($arr['key'])) {
// ...
}
因为PHP使用短路逻辑评估,将停止其到达之前is_array()
,所以你永远不会得到一个错误。
尝试:如果
is_array($arr) && array_key_exists('key', $arr)
检查它首先存在,那么如果一个数组。否则,你仍然会得到同样的错误。
if (isset($arr['key'])) {
if (is_array ($arr['key']) {
}
}
为什么不在同一个语句中:if(isset($ arr ['key'])&& is_array($ arr ['key'])? – shealtiel 2010-12-21 00:07:45
也许你可以考虑从阵列的安全,恢复数据的通用的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'
这不回答我的问题,但它不是足够清楚。编辑它,请再看一看 – shealtiel 2010-12-21 00:07:23
如果它不是**,它会发出通知。你可以做的是先检查'isset($ arr)&& is_array($ arr)'。 – ncuesta 2010-12-21 00:12:50