检查关联二维数组

时间:2018-10-03 01:20:25

标签: php arrays

我有以下数组声明

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

2 个答案:

答案 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);
?>

演示: https://3v4l.org/LANsh

答案 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;