Count Multidimensional Array Values: PHP Code Examples

Last Updated on

CraftyTechie is reader-supported. When you buy through links on our site, we may earn an affiliate commission.

Count Values in Multidimensional Array PHP Code Example

$resultant = [];
 
array_walk_recursive($students_electives,function($value,$key) use (&$resultant){
    if(!is_numeric($value)) {
        //Initiate the count to one for the newly created subject.
        if(!isset($resultant[$value])) {
            $resultant[$value] = 1;
        }
 
        //If a subject reoccurs then increase the count by one.
        else {
            $resultant[$value] += 1;
        }
    }    
},$resultant);
 
print_r($resultant);
 
/*
OUTPUT
Array
(
    [Computer Science] => 4    
    [Electronics] => 3
    [Mathematics] => 7
    [Economics] => 3
    [Chemistry] => 3
    [Biology] => 1
    [Digital Logic Design] => 3
)
*/

Have you tried any of the following highly relevant Pluralsight PHP Courses?

We love Pluralsight because it has thousands of high-quality course content and is extremely affordable. You don’t have to pay for individual courses. It’s a really small monthly membership and you get access to the entire catalog. You can track and review all of your progress and also obtain additional certifications.

Courses

  • PHP Design Patterns
  • PHP: The Big Picture
  • PHP 8: Web Application Security
  • High-Performance PHP
  • Object-Oriented PHP

Learning Paths:

  • PHP Development Fundamentals

Pluralsight Free Trial

Curious about Pluralsight but not ready to commit? We understand. We were able to get a free trial for you to test-drive and see all of their courses. Click on the link below

Try a Pluralsight free trial for 7 days!

Introduction

This article is about how to count values in multidimensional array PHP. In other ways, find the frequency of recurring values in a multidimensional array. So far, we’ve seen that a primary concern in a multidimensional array is the nesting or level of depth. A general rule is to avoid the iterative approach if the levels exceed two or three at max.

count values in multidimensional array PHP

We explained the reason in one of the articles where we had distinguished iterative and recursive approaches. Here we’ll be using both these approaches and some built-in functions in the context of PHP count values in multidimensional array. So, let’s move to the first option.

Count values in multidimensional array PHP – Iterative Approach

The iterative approach uses iterators, loops to access the array. PHP foreach loop is handy when iterating over an array and could be a good choice if the multidimensional array has at most three levels, as mentioned above. Let’s look at an example.

Example

We have an array of students_electives that contains student names as keys and arrays to keep information about their elective subject. The array has two levels only, and that’s why it is a good use case for an iterative approach.

$students_electives = [
    "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
    "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
    "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
    "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
    "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
    "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
    "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
    "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
    "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
    "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
];

So, the goal is to find the frequency of the elective subjects. Let’s find out.

$resultant = [];
foreach($students_electives as $student=>$elective) {
    //Check if a key has been created for the subject
    if(!isset($resultant[$elective["Elective"]])) {
        //Initiate the count to one for the newly created subject.
        $resultant[$elective["Elective"]] = 1;
    }
 
    else {
        //If a subject reoccurs then increase the count by one.
        $resultant[$elective["Elective"]] += 1;
    }
}
 
print_r($resultant);
 
/*
OUTPUT
Array
(
    [Computer Science] => 4
    [Electronics] => 2     
    [Economics] => 2
    [Mathematics] => 3
    [Chemistry] => 1
)
*/

Voila! The code counts the recurring elective values by incrementing the corresponding key created in the resultant array. Also, observe that we have directly accessed the array at level two using a key/index. Direct access may not be possible every time and particularly if you’ve parsed an XML or JSON response from a server.

So, always make sure to avoid more than three nested loops. Alternatively, there is the recursive approach. Let’s check that out as well. 

Option#2 Recursive Approach

So before we move on to the example, let’s add another elective to every student record in the array. That’s just to make the array more nested and have three levels. The recursive approach is ideal for digging deep into a multidimensional array.


For the recursive approach,  we can use the array_walk_recursive function. Remember that this function access the leaf nodes only. Luckily, the electives are leaf nodes in the students_electives array. That’s why it is better to use this function rather than writing a function of our own.

$students_electives = [
    "Andy" => ["ID"=>"1001", "Elective"=>["Computer Science","Electronics"]],
    "Benjamin" => ["ID"=>"1002", "Elective"=>["Electronics","Mathematics"]],
    "Catheline" => ["ID"=>"1003", "Elective"=>["Economics","Mathematics"]],
    "Dexter" => ["ID"=>"1004", "Elective"=>["Computer Science","Mathematics"]],
    "Eion" => ["ID"=>"1004", "Elective"=>["Computer Science","Economics"]],
    "Franklin" => ["ID"=>"1005", "Elective"=>["Mathematics","Chemistry"]],
    "Gina" => ["ID"=>"1006", "Elective"=>["Chemistry","Biology"]],
    "Hudson" => ["ID"=>"1007", "Elective"=>["Electronics","Digital Logic Design"]],
    "Ira" => ["ID"=>"1008","Elective"=>["Mathematics","Digital Logic Design"]],
    "Jessica" => ["ID"=>"1009","Elective"=>["Economics","Mathematics"]],
    "Kelvin" => ["ID"=>"1010","Elective"=>["Computer Science","Digital Logic Design"]],
    "Liam" =>  ["ID"=>"1011","Elective"=>["Mathematics","Chemistry"]]
];

Example

$resultant = [];
 
array_walk_recursive($students_electives,function($value,$key) use (&$resultant){
    if(!is_numeric($value)) {
        //Initiate the count to one for the newly created subject.
        if(!isset($resultant[$value])) {
            $resultant[$value] = 1;
        }
 
        //If a subject reoccurs then increase the count by one.
        else {
            $resultant[$value] += 1;
        }
    }    
},$resultant);
 
print_r($resultant);
 
/*
OUTPUT
Array
(
    [Computer Science] => 4    
    [Electronics] => 3
    [Mathematics] => 7
    [Economics] => 3
    [Chemistry] => 3
    [Biology] => 1
    [Digital Logic Design] => 3
)
*/

The example works fine. We have a frequency count for all the subjects, and we get this by calling a function only. So, it is a refactored version of what we have seen earlier. One thing to observe is that we have kept is_numeric check in the callback. That’s to filter out the Id as they are leaf nodes and get picked by the array_walk_recursive function while PHP count values in multidimensional array.

Next, let’s see another approach to count values in multidimensional array PHP.

Option#3 – Count values in multidimensional array PHP – Built-In Functions

The example we will see here is a powerful one-liner equivalent to what we have seen in the preceding examples. We have used a chain of calls to several built-in functions. So, let’s see the example first and then break it down for clarity.

Example

print_r(array_count_values(array_merge(...array_column($students_electives,"Elective"))));
 
/*
OUTPUT
Array
(
    [Computer Science] => 4
    [Electronics] => 3
    [Mathematics] => 7
    [Economics] => 3
    [Chemistry] => 3
    [Biology] => 1
    [Digital Logic Design] => 3
)
*/

BreakDown

  • array_column  – Unifies the specified column in an array. So the Electives of all the students are kept in an array.
  • array_merge – This function merges the array received from the array_column into a one-dimensional array.

Notice the … before array_column. This feature is argument unpacking, and it pops the subarrays out. Consequently, these arrays pass to the array_merge in the example. If you need more clarity, try out the example and print the result of these functions to the console one at a time to see the transformation along the way.

Conclusion

That’s it for this article. We’ve seen three different options relating to PHP count values in multidimensional array. The first is the iterative approach followed by the recursive approach. Finally, we explored how to stack some relevant built-in functions for counting values in arrays. We hope you’ve enjoyed it. Stay tuned for more interesting and informative PHP tutorials and articles.

Did you find this article helpful?

Join the best weekly newsletter where I deliver content on building better web applications. I curate the best tips, strategies, news & resources to help you develop highly-scalable and results-driven applications.

Build Better Web Apps

I hope you're enjoying this article.

Get the best content on building better web apps delivered to you.