计算数组的第3级

时间:2012-07-15 11:32:03

标签: php arrays

没有迭代数组是否可能?

$arr = array(
         'section1' => array(
                         5  => array(1, 2, 3),
                         25 => array(4, 5),
                         34 => array(10, 12),

                       ),

         'section2' => array(
                         45 => array(1, 42, 3),                             
                         64 => array(10, 2, 5, 95),
                       ),

         'section3' => array(
                         5 =>  array(1, 2, 3, 5, 2),
                         25 => array(4, 5, 14),
                         34 => array(17),
                       ),



       );

$count = 0;

foreach($arr as $section)
  foreach($section as $subsection)
    foreach($subsection as $entries)      
      $count++;

echo $count; // 23

它可以工作,但我不想通过整个数组迭代来计算一些元素......

3 个答案:

答案 0 :(得分:5)

您可以使用count()

如果您需要所有级别的所有元素:

count($arr, COUNT_RECURSIVE);

如果你只需要计算第三级的那些:

foreach($arr as $section)
  foreach($section as $subsection)
    $count += count($subsection);

答案 1 :(得分:1)

一切皆有可能吗? ; - )

我会看到两种方法可以在没有迭代的情况下完成此操作,其中一种方法是评估print_r($ main_array)值,或者计算“(”以达到所需的深度。

-

另一种方法是将数据存储为JSON,这样你就可以“遍历”树,加上它在javascript中是原生的,因此点符号非常有效。

"somefield":["anotherfield":["yetanother":value], "woohoo":["yahoo":value]]]  (excuse me if not well-formed just on the fly)

然后你解析JSON和引用,如:myval = somefield.anotherfield.yetanother; // myval = value

答案 2 :(得分:0)

这是我解决这个难题的方法!

<?php
$arr = array(
     'section1' => array(
                     5  => array(1, 2, 3),
                     25 => array(4, 5),
                     34 => array(10, 12),

                   ),

     'section2' => array(
                     45 => array(1, 42, 3),                             
                     64 => array(10, 2, 5, 95),
                   ),

     'section3' => array(
                     5 =>  array(1, 2, 3, 5, 2),
                     25 => array(4, 5, 14),
                     34 => array(17),
                   ),



   );

function count_all($array)
{
    $count = 0;
    foreach ($array as $k => $v)
    {
        if (is_array($v))
        {
            $count += count_all($v);
        }
        else {
            $count++;
        }
    }
    return $count;
}

echo count_all($arr);