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);

3番目のレベルのものだけを数える必要がある場合:

foreach($arr as $section)
  foreach($section as $subsection)
    $count += count($subsection);
于 2012-07-15T11:35:36.883 に答える
1

何か可能ですか?;-)

反復せずにこれを行うことができる2つの方法があります。1つは、print_r($ main_array)値を評価して、おそらく "("をカウントして目的の深さに到達することです。

-

もう1つの方法は、データを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

于 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 に答える