Количество многомерных массивов в PHP - PullRequest
16 голосов
/ 30 января 2012

У меня есть многомерный массив, настроенный следующим образом

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. и математика, чтобы получить номер.

Кто-нибудь может мне помочь?

Ответы [ 7 ]

43 голосов
/ 17 июля 2012

Немного поздно, но это чистый способ написать.

$totalTickets = array_sum(array_map("count", $tickets));

Предположим, $tickets - это ваш многомерный массив.

Я расширил код, чтобы датьобъясненный пример, потому что array_map может быть новым для некоторых

$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

Так что, поскольку нам не нужен промежуточный результат каждого типа, мы можем передать результат в array_sum

$totalTickets = array_sum(array_map("count", $tickets));
21 голосов
/ 30 января 2012
$count = 0;
foreach ($array as $type) {
    $count+= count($type);
}
16 голосов
/ 27 июня 2014

Используйте Подсчитать рекурсив и вычтите Счет первого уровня , например:

count($mainArr, COUNT_RECURSIVE) - count($mainArr);

Если в вашем массиве +3 уровня, просто добавьте [?]клавиши:

count($mainArr[1], COUNT_RECURSIVE) - count($mainArr[1]);
2 голосов
/ 17 октября 2014

:)

$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 /> ";

выход:

количество массивов 3

количество массивов 2

количество массивов 2

Массив 7

количество массивов 5

Массив 4

2 голосов
/ 30 января 2012

Самый простой способ сделать это - один простой цикл foreach:

$count = 0;
foreach( $tickets as $ticketType){
    $count += count( $ticketType);
}
0 голосов
/ 15 декабря 2017

Чтобы подсчитать общее количество билетов, этот код поможет вам для PHP.

foreach($mainArray as $Array){
    foreach($Array as $perTicke){
        $count++;
    }
}
$total_ticket = $count;
0 голосов
/ 30 января 2012
$multiArrayTickets = array(...);
$countTickets = 0;

foreach($multiArrayTickets as $tickets)
  $countTickets += count($tickets);

echo $countTickets . " tickets found.";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...