如何计算内部数组计数

时间:2015-08-17 11:41:45

标签: php arrays

我有一个像

这样的数组
$arr[0] = 'summary';
$arr[1]['contact'][] = 'address1';
$arr[1]['contact'][] = 'address2';
$arr[1]['contact'][] = 'country';
$arr[1]['contact'][] = 'city';
$arr[1]['contact'][] = 'pincode';
$arr[1]['contact'][] = 'phone_no';
$arr[2]['work'][] = 'address1';
$arr[2]['work'][] = 'address2';
$arr[2]['work'][] = 'country';
$arr[2]['work'][] = 'city';
$arr[2]['work'][] = 'pincode';
$arr[2]['work'][] = 'phone_no';

使用count($arr)它会返回3但我还需要计算内部数组值,以便它返回13

我到目前为止所做的是

function getCount($arr,$count = 0) {

    foreach ($arr as $value) {

        if (is_array($value)) {
            echo $count;
            getCount($value,$count);
        }
        $count = $count+1;
    }
    return $count;
}

echo getCount($arr);

但它没有按预期工作

4 个答案:

答案 0 :(得分:7)

您可以使用array_walk_recursive。这可能会有所帮助 -

$tot = 0;
array_walk_recursive($arr, function($x) use(&$tot) {
    $tot++;
});

但这是一个递归函数,所以你需要小心。

getCount()方法中,您不会将数组的计数存储在任何位置。因此,每次通话$count仅增加1

DEMO

答案 1 :(得分:4)

如果你只需要计算前两个级别,你可以做一个简单的foreach,不需要使用递归函数!:

$count = 0;
foreach( $bigArray as $smallArray ){
    if( is_array( $smallArray ) )
          $count += count( $smallArray );
    else
          $count ++;
}

答案 2 :(得分:4)

只需尝试这个

function getCount($arr, $count = 0) {
    foreach ($arr as $value) {
        if (is_array($value)) {
            $count = getCount($value, $count);
        } else {
            $count = $count + 1;
        }
    }
    return $count;
}

echo getCount($arr);

您在这里所做的是,您没有将值存储在任何变量中,并且因为您处于完美状态而导致代码出现问题

答案 3 :(得分:0)

也许我的方法很幼稚,但是我只使用了sizeof()函数。该函数的文档显示,它可能需要第二个参数1来告诉该函数递归计算多维数组。

因此,要获取“计数”,您只需写sizeof($arr, 1);,它应该返回13。

我认识到编写自己的函数的价值,但是这种内置的PHP方法不能很简洁地解决问题吗?