没有迭代数组是否可能?
$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
它可以工作,但我不想通过整个数组迭代来计算一些元素......
答案 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);