我有以下数组声明
Array
(
[name] => 1
[callrate] => 1
[maxcalls] => 100000
[mintime] => 5
[maxtime] => 16
[skillexps] => Array
(
[0] => 1
[1] => 2
)
)
如何检查数组中包含的数组。我尝试过
function is_multi($a) {
foreach ($a as $v) {
if (is_array($v))
{
return "has array";
break;
}
break;
}
return 'only value';
}
但这仅给出“唯一值”。我需要检查如果关联数组是二维的
感谢advacne
答案 0 :(得分:2)
为什么您现有的代码不起作用?
因为您要查找数组的每个元素以检查它是否是数组,还是不使用foreach()
和is_array()
?如果不是break;
,那么当它检查name
元素时,值不是数组,它只是一个整数,因此它立即break;
并消失foreach()
循环并返回仅值,但是当我从您的代码中删除了额外 break;
时,它可以正常工作,因为它会检查每个数组的元素,以验证它是否包含数组。我还添加了一种很好的方法来检查数组是否为多维。希望这会有所帮助:)
function is_multi($a) {
foreach ($a as $v) {
if (is_array($v))
{
return "has array";
break;
}
// removed extra break; from here
}
return 'only value';
}
要检查数组是否为多维?我会这样做,
<?php
function is_multi(array $array) {
return count($array) !== count($array, COUNT_RECURSIVE);
}
$array = array
(
'name' => 1,
'callrate' => 1,
'maxcalls' => 100000,
'mintime' => 5,
'maxtime' => 16,
'skillexps' => array
(
1,
2
)
);
echo is_multi($array);
?>
答案 1 :(得分:1)
如果您要检查数组是否为2d,则可以使用下面的数组过滤器
$data=array
(
'name' => 1,
'callrate' => 1,
'maxcalls' => 100000,
'mintime' => 5,
'maxtime' => 16,
'skillexps' =>array(1,2)
);
$filteredItems = array_filter($data, function($elem) {
return is_array($elem);
});
if(count($filteredItems)>0){
echo "multi dimensional";
}
else{
echo "1 dimensional";
}
如果您希望检查每个键,则可以将array_map与如下所示的闭包功能一起使用
$data=array
(
'name' => 1,
'callrate' => 1,
'maxcalls' => 100000,
'mintime' => 5,
'maxtime' => 16,
'skillexps' => array
(
0 => 1,
1 => 2
)
);
$array = array_map(function ($a) {
return is_array($a) ? "has array" : "only value";
}, $data);
print_r($array);
输出
Array
(
[name] => only value
[callrate] => only value
[maxcalls] => only value
[mintime] => only value
[maxtime] => only value
[skillexps] => has array
)
如果要检查整个数组是否为多维,则只需在下面添加一行
$multi=array_search('has array', $array) ? "is multi " : "is not multi";
echo $multi;