PHP Fundamentals

Array Functions

13 min Lesson 13 of 45

Mastering PHP Array Functions

PHP provides over 70 built-in array functions that make working with arrays powerful and efficient. In this lesson, we'll explore the most useful and commonly used array functions that every PHP developer should know.

Note: Most array functions either modify the original array in place or return a new array. Always check the function documentation to understand its behavior.

Array Transformation Functions

array_map() - Transform Elements

Apply a callback function to each element:

<?php // Square all numbers $numbers = [1, 2, 3, 4, 5]; $squared = array_map(function($n) { return $n * $n; }, $numbers); print_r($squared); // [1, 4, 9, 16, 25] // Convert to uppercase $names = ["alice", "bob", "charlie"]; $upper = array_map("strtoupper", $names); print_r($upper); // ["ALICE", "BOB", "CHARLIE"] // Multiple arrays $first = [1, 2, 3]; $second = [10, 20, 30]; $result = array_map(function($a, $b) { return $a + $b; }, $first, $second); print_r($result); // [11, 22, 33] ?>

array_filter() - Filter Elements

Filter array elements using a callback:

<?php // Filter even numbers $numbers = [1, 2, 3, 4, 5, 6, 7, 8]; $even = array_filter($numbers, function($n) { return $n % 2 === 0; }); print_r($even); // [2, 4, 6, 8] // Filter non-empty values $data = ["apple", "", "banana", null, "cherry", 0]; $filtered = array_filter($data); print_r($filtered); // ["apple", "banana", "cherry"] // Filter with keys $ages = ["John" => 25, "Jane" => 30, "Bob" => 17, "Alice" => 22]; $adults = array_filter($ages, function($age, $name) { return $age >= 18; }, ARRAY_FILTER_USE_BOTH); print_r($adults); ?>

array_reduce() - Reduce to Single Value

Reduce array to a single value using a callback:

<?php // Sum all numbers $numbers = [1, 2, 3, 4, 5]; $sum = array_reduce($numbers, function($carry, $item) { return $carry + $item; }, 0); echo $sum; // 15 // Find maximum $max = array_reduce($numbers, function($carry, $item) { return $item > $carry ? $item : $carry; }, $numbers[0]); echo $max; // 5 // Concatenate strings $words = ["Hello", "World", "PHP"]; $sentence = array_reduce($words, function($carry, $item) { return $carry . " " . $item; }, ""); echo trim($sentence); // "Hello World PHP" ?>
Tip: array_map(), array_filter(), and array_reduce() are fundamental functional programming patterns. Master them for cleaner, more expressive code.

Array Searching Functions

in_array() - Check if Value Exists

<?php $fruits = ["apple", "banana", "cherry"]; if (in_array("banana", $fruits)) { echo "Found banana!"; } // Strict type checking $numbers = [1, 2, 3, "4"]; var_dump(in_array(4, $numbers)); // true (loose) var_dump(in_array(4, $numbers, true)); // false (strict) ?>

array_search() - Find Key of Value

<?php $colors = ["red", "green", "blue", "yellow"]; $key = array_search("blue", $colors); echo $key; // 2 // Returns false if not found $key = array_search("purple", $colors); if ($key === false) { echo "Color not found"; } // With associative arrays $ages = ["John" => 25, "Jane" => 30, "Bob" => 25]; $name = array_search(25, $ages); echo $name; // "John" (first match) ?>

array_key_exists() vs isset()

<?php $data = ["name" => "John", "age" => null]; // array_key_exists checks if key exists (even if value is null) var_dump(array_key_exists("age", $data)); // true var_dump(array_key_exists("email", $data)); // false // isset returns false if value is null var_dump(isset($data["age"])); // false var_dump(isset($data["name"])); // true ?>
Warning: Use array_search() with strict comparison (===) because it returns the key (which could be 0), not true/false.

Array Manipulation Functions

array_slice() - Extract Portion

<?php $fruits = ["apple", "banana", "cherry", "date", "elderberry"]; // Get slice from position 1, length 3 $slice = array_slice($fruits, 1, 3); print_r($slice); // ["banana", "cherry", "date"] // Negative offset (from end) $slice = array_slice($fruits, -2); print_r($slice); // ["date", "elderberry"] // Preserve keys $slice = array_slice($fruits, 1, 3, true); print_r($slice); ?>

array_splice() - Remove and Replace

<?php $colors = ["red", "green", "blue", "yellow"]; // Remove 2 elements starting at index 1 $removed = array_splice($colors, 1, 2); print_r($removed); // ["green", "blue"] print_r($colors); // ["red", "yellow"] // Remove and replace $colors = ["red", "green", "blue", "yellow"]; array_splice($colors, 1, 2, ["orange", "purple"]); print_r($colors); // ["red", "orange", "purple", "yellow"] // Insert without removing $colors = ["red", "blue"]; array_splice($colors, 1, 0, ["green"]); print_r($colors); // ["red", "green", "blue"] ?>

array_merge() - Combine Arrays

<?php // Merge indexed arrays $arr1 = [1, 2, 3]; $arr2 = [4, 5, 6]; $merged = array_merge($arr1, $arr2); print_r($merged); // [1, 2, 3, 4, 5, 6] // Merge associative arrays (later values override) $default = ["color" => "red", "size" => "M"]; $custom = ["size" => "L", "style" => "casual"]; $config = array_merge($default, $custom); print_r($config); // ["color" => "red", "size" => "L", "style" => "casual"] // Merge multiple arrays $result = array_merge($arr1, $arr2, [7, 8, 9]); print_r($result); ?>

Array Calculation Functions

<?php $numbers = [10, 20, 30, 40, 50]; // Sum of all elements echo array_sum($numbers); // 150 // Product of all elements echo array_product($numbers); // 12000000 // Count elements echo count($numbers); // 5 // Count element frequencies $items = ["apple", "banana", "apple", "cherry", "banana", "apple"]; $counts = array_count_values($items); print_r($counts); // ["apple" => 3, "banana" => 2, "cherry" => 1] ?>

Array Sorting Functions

<?php // Sort indexed array (values) $numbers = [3, 1, 4, 1, 5, 9, 2, 6]; sort($numbers); // Ascending print_r($numbers); rsort($numbers); // Descending print_r($numbers); // Sort associative array (by value, maintain keys) $ages = ["John" => 25, "Jane" => 30, "Bob" => 20]; asort($ages); // Ascending by value print_r($ages); arsort($ages); // Descending by value print_r($ages); // Sort associative array (by key) ksort($ages); // Ascending by key print_r($ages); krsort($ages); // Descending by key print_r($ages); // Custom sorting with callback $words = ["apple", "Banana", "cherry", "Date"]; usort($words, function($a, $b) { return strcasecmp($a, $b); // Case-insensitive }); print_r($words); ?>
Note: Sorting functions modify the original array and return true/false (not a sorted copy).

Array Combination Functions

<?php // Combine two arrays as keys and values $keys = ["name", "age", "city"]; $values = ["John", 25, "New York"]; $person = array_combine($keys, $values); print_r($person); // ["name" => "John", "age" => 25, "city" => "New York"] // Chunk array into smaller arrays $numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]; $chunks = array_chunk($numbers, 3); print_r($chunks); // [[1, 2, 3], [4, 5, 6], [7, 8, 9]] // Fill array with values $filled = array_fill(0, 5, "x"); print_r($filled); // ["x", "x", "x", "x", "x"] // Fill with range of values $range = range(1, 10, 2); print_r($range); // [1, 3, 5, 7, 9] ?>

Array Unique and Difference Functions

<?php // Remove duplicates $numbers = [1, 2, 2, 3, 4, 4, 5]; $unique = array_unique($numbers); print_r($unique); // [1, 2, 3, 4, 5] // Find values in first array not in second $arr1 = [1, 2, 3, 4, 5]; $arr2 = [3, 4, 5, 6, 7]; $diff = array_diff($arr1, $arr2); print_r($diff); // [1, 2] // Find common values $intersect = array_intersect($arr1, $arr2); print_r($intersect); // [3, 4, 5] // Difference by keys $a = ["a" => 1, "b" => 2, "c" => 3]; $b = ["b" => 2, "c" => 4, "d" => 5]; $diff = array_diff_key($a, $b); print_r($diff); // ["a" => 1] ?>

Array Reversal and Shuffling

<?php // Reverse array order $colors = ["red", "green", "blue"]; $reversed = array_reverse($colors); print_r($reversed); // ["blue", "green", "red"] // Flip keys and values $map = ["a" => 1, "b" => 2, "c" => 3]; $flipped = array_flip($map); print_r($flipped); // [1 => "a", 2 => "b", 3 => "c"] // Shuffle array (randomize order) $deck = ["A", "K", "Q", "J", "10"]; shuffle($deck); print_r($deck); // Random order // Get random element(s) $fruits = ["apple", "banana", "cherry", "date"]; $random = array_rand($fruits, 2); print_r($random); // Two random keys ?>

Practical Example: Data Processing Pipeline

<?php // Process user data $users = [ ["name" => "John Doe", "age" => 25, "active" => true], ["name" => "Jane Smith", "age" => 17, "active" => true], ["name" => "Bob Johnson", "age" => 35, "active" => false], ["name" => "Alice Brown", "age" => 28, "active" => true] ]; // Filter: Get active adult users $activeAdults = array_filter($users, function($user) { return $user["active"] && $user["age"] >= 18; }); // Map: Extract names $names = array_map(function($user) { return $user["name"]; }, $activeAdults); // Reduce: Create comma-separated list $nameList = array_reduce($names, function($carry, $name) { return $carry ? $carry . ", " . $name : $name; }, ""); echo "Active adult users: $nameList"; // Output: Active adult users: John Doe, Alice Brown ?>

Practical Example: Shopping Cart Operations

<?php $cart = [ ["id" => 1, "name" => "Laptop", "price" => 999, "qty" => 1], ["id" => 2, "name" => "Mouse", "price" => 25, "qty" => 2], ["id" => 3, "name" => "Keyboard", "price" => 75, "qty" => 1] ]; // Calculate subtotals $cartWithSubtotals = array_map(function($item) { $item["subtotal"] = $item["price"] * $item["qty"]; return $item; }, $cart); // Calculate total $total = array_reduce($cartWithSubtotals, function($sum, $item) { return $sum + $item["subtotal"]; }, 0); echo "Cart Total: $$total"; // Cart Total: $1124 // Find specific item $itemKey = array_search(2, array_column($cart, "id")); if ($itemKey !== false) { echo "Found: " . $cart[$itemKey]["name"]; } // Sort by price usort($cart, function($a, $b) { return $a["price"] - $b["price"]; }); ?>
Exercise:
  1. Create an array of numbers and use array functions to:
    • Filter only even numbers
    • Square each number
    • Calculate the sum of all squared even numbers
  2. Create an array of students with name, grade, and subject. Write code to:
    • Filter students with grades above 80
    • Sort them by grade descending
    • Extract only their names
  3. Create two arrays and find their union, intersection, and difference
  4. Write a function that removes duplicate values from a nested array

Performance Tips

  • Use isset() instead of array_key_exists() when null values aren't important (it's faster)
  • Use array_map() instead of foreach loops when transforming all elements
  • Avoid array_merge() in loops; use array_push() or [] instead
  • Use array_column() to extract a single column from multi-dimensional arrays
  • Chain array functions for cleaner, more readable code
Tip: Learn to think functionally with array_map(), array_filter(), and array_reduce(). They often lead to cleaner, more maintainable code than traditional loops.

Common Patterns

<?php // Extract column from 2D array $users = [ ["name" => "John", "email" => "john@example.com"], ["name" => "Jane", "email" => "jane@example.com"] ]; $emails = array_column($users, "email"); // Pluck with keys $emailMap = array_column($users, "email", "name"); print_r($emailMap); // ["John" => "john@example.com", "Jane" => "jane@example.com"] // Group by key $items = [ ["category" => "fruit", "name" => "apple"], ["category" => "fruit", "name" => "banana"], ["category" => "veggie", "name" => "carrot"] ]; $grouped = []; foreach ($items as $item) { $grouped[$item["category"]][] = $item["name"]; } print_r($grouped); ?>

Summary

In this lesson, you learned:

  • Transformation functions: array_map(), array_filter(), array_reduce()
  • Search functions: in_array(), array_search(), array_key_exists()
  • Manipulation functions: array_slice(), array_splice(), array_merge()
  • Calculation functions: array_sum(), array_product(), count()
  • Set operations: array_unique(), array_diff(), array_intersect()
  • Practical applications in data processing and business logic

Mastering array functions is essential for writing efficient, clean PHP code. Practice combining them to solve complex problems elegantly!

ES
Edrees Salih
21 hours ago

We are still cooking the magic in the way!