有没有可能不迭代数组?
$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它可以工作,但我不想通过迭代整个数组来计算一些元素……
发布于 2012-07-15 19:35:37
您可以使用count()。
如果需要所有级别的所有元素的总数:
count($arr, COUNT_RECURSIVE);如果只需要计算第三层的数量:
foreach($arr as $section)
foreach($section as $subsection)
$count += count($subsection);发布于 2012-07-15 19:40:32
一切皆有可能,对吧?;-)
我会看到两种不需要迭代就可以做到这一点的方法,一种是计算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
发布于 2012-07-15 19:37:27
这是我对这个难题的看法!
<?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);https://stackoverflow.com/questions/11491508
复制相似问题