PHP中的多维数组计数

PHP中的多维数组计数,php,multidimensional-array,Php,Multidimensional Array,我有一个多维数组设置如下 array() { ["type1"] => array() { ["ticket1"] => array(9) { // ticket details here } ["ticket2"] => array(10) { // ticket details here } ["ti

我有一个多维数组设置如下

array() {
    ["type1"] =>
    array() {
        ["ticket1"] =>
        array(9) { 
           // ticket details here
        }
        ["ticket2"] =>
        array(10) { 
           // ticket details here
        }
        ["ticket3"] =>
        array(9) { 
           // ticket details here
        }
    }
    ["type2"] =>
    array() {
        ["ticket1"] =>
        array(9) { 
           // ticket details here
        }
        ["ticket2"] =>
        array(10) { 
           // ticket details here
        }
        ["ticket3"] =>
        array(9) { 
           // ticket details here
        }
    }
}
等等

我试图获得数组中票证总数的计数(第二级项目的数量),但是类型的数量是可变的,每个票证的字段数量也是可变的,因此我不能使用count_RECURSIVE和Mathematics来获得数字


有人能帮我吗?

最简单的方法是一个简单的foreach循环:

$count=0;
foreach($ticketType形式的票证){
$count+=count($ticketType);
}

有点晚,但这是一种干净的编写方式

$totalTickets = array_sum(array_map("count", $tickets));
假设
$tickets
是多维数组

我已经扩展了代码,给出了一个解释过的示例,因为对某些人来说可能是新的

$tickets = array(
    "type1" => array(
        "ticket1" => array(),
        "ticket2" => array(),
        "ticket3" => array(),
    ),
    "type2" => array(
        "ticket4" => array(),
        "ticket5" => array(),
        "ticket6" => array(),
        "ticket7" => array(),
    ),
    "type3" => array(
        "ticket8" => array()
    )
);

// First we map count over every first level item in the array
// giving us the total number of tickets for each type.
$typeTotals = array_map("count", $tickets);

// print_r($typeTotals);
// $type_totals --> Array (
//                       [type1] => 3,
//                       [type2] => 4,
//                       [type3] => 1 
//                  )

//Then we sum the values of each of these
$totalTickets = array_sum($typeTotals);

print($totalTickets);
// $totalTickets --> 8
因为我们不关心每种类型的中间结果,所以我们可以将结果输入到


使用递归计数并减去第一级计数,如下所示:

count($mainArr, COUNT_RECURSIVE) - count($mainArr);
如果阵列有+3个级别,只需添加[?]键:

count($mainArr[1], COUNT_RECURSIVE) - count($mainArr[1]);
:)

$test=array(
排列(
“测试”,“测试”,“测试”
),
排列(
“测试”,“测试”
),
排列(
排列(
“测试”
),
排列(
“测试”,“测试”,“测试”,“测试”
)
)
);
回显“数组计数”。计数($test[0])。“
”; 回显“数组计数”。计数($test[1])。“
”; 回显“数组计数”。计数($test[2])。“
”; 回显“数组计数”。计数($test[2],1)。“
”; 回显“数组计数”。(计数($test[2],1)-计数($test[2])。“
”;//所有子num-父num 回显“数组计数”。计数($test[2][1])。“
”;
输出:

数组计数3

数组计数2

数组计数2

数组计数7

数组计数5


数组计数4

要计算票证总数,下面的代码将帮助您使用PHP

foreach($mainArray as $Array){
    foreach($Array as $perTicke){
        $count++;
    }
}
$total_ticket = $count;

这应该是可行的,但是你的变量命名真的很混乱(混乱?@FrostyZ我在那里拼错了,修复了,我还加了前缀
$type
,这样它们里面的内容就更清楚了。如果我有四维数组呢?太好了@nashwa,recursive将计算IIRC的每个元素,无论我多么希望我能多次提高投票的声誉。为什么这不是公认的答案?对我来说,
count($arr,count\u RECURSIVE)
已经足够了,但是回答得很好,因为它允许更多depth@MadaraUchiha循环内的计数加法(以最好的为准)可能更好,因为您不必迭代所有内容。不要只为了获得元素计数而进行内部foreach循环。
count($mainArr[1], COUNT_RECURSIVE) - count($mainArr[1]);
$test = array (
    array (
        'test','test','test'
    ),
    array (
    'test','test'
    ),
    array (
        array (
        'test'
        ),
        array (
        'test','test','test','test'
        )
    )
 );
 echo "  array count ". count($test[0]) ." <br /> ";
 echo "  array count ". count($test[1]) ." <br /> ";
 echo "  array count ". count($test[2]) ." <br /> ";
 echo "  array count ". count($test[2],1) ." <br /> ";
 echo "  array count ". (count($test[2],1) - count($test[2])) ." <br /> "; // all child num - parent num
 echo "  array count ". count($test[2][1]) ." <br /> ";
foreach($mainArray as $Array){
    foreach($Array as $perTicke){
        $count++;
    }
}
$total_ticket = $count;