首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的3级计数

数组的3级计数
EN

Stack Overflow用户
提问于 2012-07-15 19:32:03
回答 3查看 475关注 0票数 0

有没有可能不迭代数组?

代码语言:javascript
复制
$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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-15 19:35:37

您可以使用count()

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

代码语言:javascript
复制
count($arr, COUNT_RECURSIVE);

如果只需要计算第三层的数量:

代码语言:javascript
复制
foreach($arr as $section)
  foreach($section as $subsection)
    $count += count($subsection);
票数 5
EN

Stack Overflow用户

发布于 2012-07-15 19:40:32

一切皆有可能,对吧?;-)

我会看到两种不需要迭代就可以做到这一点的方法,一种是计算print_r($main_array)的值,或者计算"(“以达到所需的深度。

--

另一种方法是将数据存储为JSON,这样您就可以“遍历”树,而且它在javascript中是原生的,因此使用点表示法非常有效。

代码语言: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

票数 1
EN

Stack Overflow用户

发布于 2012-07-15 19:37:27

这是我对这个难题的看法!

代码语言:javascript
复制
<?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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11491508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档