0

是否可以不迭代数组?

$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

它有效,但我不想遍历整个数组只是为了计算一些元素......

4

3 回答 3

5

您可以使用count().

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

count($arr, COUNT_RECURSIVE);

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

foreach($arr as $section)
  foreach($section as $subsection)
    $count += count($subsection);
于 2012-07-15T11:35:36.883 回答
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 = 值

于 2012-07-15T11:40:31.523 回答
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);
于 2012-07-15T11:37:27.490 回答