PHP Arrays · Chapter 8.2 · Functional Programming

PHP Array Functions
map · filter · reduce · unique · flip

PHP के Functional Array Functions — array_map, array_filter, array_reduce, array_unique, array_flip। Cleaner code, कम lines, ज़्यादा power। Modern PHP style।

🗺️ array_map() 🔎 array_filter() 📉 array_reduce() 🔁 array_unique() ↔️ array_flip()
mapTransform करना
filterFilter करना
reduceSingle value बनाना
fn()Arrow function PHP 7.4+

📋 इस Article में क्या-क्या है

  1. Functional Style क्या है?
  2. array_map() — Transform
  3. array_filter() — Filter
  4. array_reduce() — Reduce
  5. array_unique() — Duplicates हटाना
  6. array_flip() — Keys-Values बदलना
  7. Chaining — Functions एक साथ
  8. Quick Reference + Combined Example
1
Functional Style क्या है?

Functional Programming Style में loops की जगह functions use होते हैं। Code shorter, readable, और bug-free होता है। PHP 7.4 में आए Arrow Functions (fn() =>) से यह style और आसान हो गई।

❌ Old Style — foreach loops

// Prices double करना
$prices = [100, 200, 300];
$doubled = [];
foreach ($prices as $p) {
  $doubled[] = $p * 2;
}
// 5 lines!

✅ New Style — array_map

// Prices double करना
$prices = [100, 200, 300];
$doubled = array_map(
  fn($p) => $p * 2,
  $prices
);
// 1 clean expression!
Arrow Function Syntax (PHP 7.4+): fn($x) => $x * 2 — यह function($x) { return $x * 2; } का shorthand है। Outer scope के variables automatically available रहते हैं — use keyword की ज़रूरत नहीं।

2
array_map() — हर Element Transform करना
map
()

array_map()

Array के हर element पर एक function apply करता है और transformed values का नया array return करता है। Original array नहीं बदलता।

PHP 4+ Returns: new array Non-destructive
[1, 2, 3, 4]
array_map(fn×2)
[2, 4, 6, 8]
array array_map( callable|null $callback, array $array, array ...$arrays )
array_map() — BASIC EXAMPLES
<?php
$nums = [1, 2, 3, 4, 5];

// Arrow function — double करो
$doubled = array_map(fn($n) => $n * 2, $nums);
print_r($doubled); // [2, 4, 6, 8, 10]

// Square करो
$squared = array_map(fn($n) => $n ** 2, $nums);
print_r($squared); // [1, 4, 9, 16, 25]

// Built-in function use करना
$names = ["rahul", "priya", "amit"];
$upper = array_map("strtoupper", $names);
print_r($upper); // [RAHUL, PRIYA, AMIT]

$proper = array_map("ucwords", $names);
print_r($proper); // [Rahul, Priya, Amit]
?>
array_map() — REAL WORLD EXAMPLES
<?php
// 1. Prices में GST add करना
$prices = [1000, 2500, 500, 1800];
$withGST = array_map(fn($p) => round($p * 1.18, 2), $prices);
print_r($withGST); // [1180, 2950, 590, 2124]

// 2. User data sanitize करना
$inputs = [" rahul ", " PRIYA ", " amit "];
$clean = array_map(
  fn($s) => ucwords(strtolower(trim($s))),
  $inputs
);
print_r($clean); // [Rahul, Priya, Amit]

// 3. Products से names extract करना
$products = [
  ["id" => 1, "name" => "PHP Book", "price" => 450],
  ["id" => 2, "name" => "Laravel", "price" => 799],
  ["id" => 3, "name" => "MySQL", "price" => 299],
];
$names = array_map(fn($p) => $p["name"], $products);
$prices = array_map(fn($p) => $p["price"], $products);
echo implode(", ", $names); // PHP Book, Laravel, MySQL

// 4. Multiple arrays एक साथ map
$a = [1, 2, 3];
$b = [10, 20, 30];
$sum = array_map(fn($x, $y) => $x + $y, $a, $b);
print_r($sum); // [11, 22, 33]
?>
💡 null callback trick: array_map(null, $a, $b) — callback null होने पर multiple arrays को zip करता है: [[1,10], [2,20], [3,30]]। Python के zip() जैसा।

3
array_filter() — Condition से Filter करना
filt
er()

array_filter()

Callback function के basis पर array elements को filter करता है। जो elements true return करें वो रहते हैं, false वाले हट जाते हैं। Keys preserve होती हैं।

PHP 4+ Returns: filtered array Keys preserved!
[1,2,3,4,5,6]
filter(even)
[2, 4, 6]
array array_filter( array $array, ?callable $callback = null, int $mode = 0 )
array_filter() — BASIC EXAMPLES
<?php
$nums = [1, 2, 3, 4, 5, 6, 7, 8];

// Even numbers filter
$even = array_filter($nums, fn($n) => $n % 2 === 0);
print_r($even); // [1=>2, 3=>4, 5=>6, 7=>8] — keys preserved!

// 5 से बड़े numbers
$big = array_filter($nums, fn($n) => $n > 5);
print_r($big); // [5=>6, 6=>7, 7=>8]

// Callback के बिना — falsy values हटाओ
$mixed = [0, "PHP", "", 42, null, false, "Hello"];
$clean = array_filter($mixed); // No callback!
print_r($clean); // [1=>"PHP", 3=>42, 6=>"Hello"]

// Re-index करना — filter के बाद
$clean = array_values($clean); // [0=>"PHP", 1=>42, 2=>"Hello"]
?>
array_filter() — REAL WORLD EXAMPLES
<?php
// 1. Adult users filter (18+)
$users = [
  ["naam" => "Rahul", "umar" => 25],
  ["naam" => "Priya", "umar" => 16],
  ["naam" => "Amit", "umar" => 30],
  ["naam" => "Neha", "umar" => 15],
];
$adults = array_values(array_filter(
  $users,
  fn($u) => $u["umar"] >= 18
));
// [{Rahul,25}, {Amit,30}]

// 2. Empty form fields हटाना
$formData = [
  "naam" => "Rahul",
  "phone" => "", // empty
  "email" => "r@g.com",
  "address" => " ", // only spaces
];
$filled = array_filter($formData, fn($v) => trim($v) !== "");
// ["naam"=>"Rahul", "email"=>"r@g.com"]

// 3. In-stock products
$products = [
  ["name" => "Book", "stock" => 5],
  ["name" => "Pen", "stock" => 0],
  ["name" => "Bag", "stock" => 12],
];
$inStock = array_values(array_filter(
  $products,
  fn($p) => $p["stock"] > 0
));
// [{Book,5}, {Bag,12}]
?>
⚠️ Keys Preserved! array_filter() keys preserve करता है — filter के बाद gaps हो सकते हैं। हमेशा array_values(array_filter(...)) use करो अगर 0-indexed array चाहिए।

4
array_reduce() — Array को Single Value में
redc
e()

array_reduce()

Array के सभी elements पर iteratively callback apply करके एक single value में reduce करता है। Sum, product, concatenation, complex aggregations के लिए।

PHP 4+ Returns: single value Accumulator Pattern
[10, 20, 30]
reduce(+, 0)
60
mixed array_reduce( array $array, callable $callback, mixed $initial = null )
ParameterDescription
$arrayInput array
$callbackfn($carry, $item) — $carry = accumulator, $item = current element
$initialStarting value of accumulator (0 for sum, "" for string, [] for array)
array_reduce() — HOW IT WORKS
<?php
$nums = [1, 2, 3, 4, 5];

// Step by step — sum
// Start: carry=0
// Step 1: carry = 0 + 1 = 1
// Step 2: carry = 1 + 2 = 3
// Step 3: carry = 3 + 3 = 6
// Step 4: carry = 6 + 4 = 10
// Step 5: carry = 10 + 5 = 15
$sum = array_reduce($nums, fn($carry, $item) => $carry + $item, 0);
echo $sum; // 15

// Product (गुणा)
$product = array_reduce($nums, fn($c, $i) => $c * $i, 1);
echo $product; // 120 (1×2×3×4×5)

// Max value
$max = array_reduce($nums, fn($c, $i) => $i > $c ? $i : $c, 0);
echo $max; // 5
?>
array_reduce() — REAL WORLD EXAMPLES
<?php
// 1. Cart total calculate
$cart = [
  ["name" => "PHP Book", "price" => 450, "qty" => 2],
  ["name" => "Laravel", "price" => 799, "qty" => 1],
  ["name" => "MySQL", "price" => 299, "qty" => 3],
];
$total = array_reduce(
  $cart,
  fn($carry, $item) => $carry + ($item["price"] * $item["qty"]),
  0
);
echo "Total: ₹" . number_format($total, 2); // ₹2,594.00

// 2. Group by category
$items = [
  ["name" => "Shirt", "cat" => "Clothing"],
  ["name" => "PHP Book", "cat" => "Books"],
  ["name" => "Jeans", "cat" => "Clothing"],
  ["name" => "JS Book", "cat" => "Books"],
];
$grouped = array_reduce($items, function($carry, $item) {
  $carry[$item["cat"]][] = $item["name"];
  return $carry;
}, []);
print_r($grouped);
// [Clothing=>[Shirt,Jeans], Books=>[PHP Book,JS Book]]
?>
💡 Initial Value Important है: Sum के लिए 0, product के लिए 1, string के लिए "", array के लिए [] — initial value सही चुनना ज़रूरी है। गलत initial value से गलत results आते हैं।

5
array_unique() — Duplicates हटाना
uniq
ue()

array_unique()

Array से duplicate values हटाता है — पहली occurrence रहती है, बाकी हट जाती हैं। Keys preserve होती हैं।

PHP 4+ Returns: array Keys preserved
[1,2,2,3,3,4]
array_unique()
[1, 2, 3, 4]
array array_unique( array $array, int $flags = SORT_STRING )
array_unique() — EXAMPLES
<?php
// Basic duplicate removal
$nums = [1, 2, 2, 3, 3, 3, 4];
print_r(array_unique($nums));
// [0=>1, 1=>2, 3=>3, 6=>4] — keys preserved

// Re-index करना
$unique = array_values(array_unique($nums));
print_r($unique); // [0=>1, 1=>2, 2=>3, 3=>4]

// Strings
$tags = ["PHP", "MySQL", "PHP", "Laravel", "MySQL"];
$uniqueTags = array_values(array_unique($tags));
print_r($uniqueTags); // [PHP, MySQL, Laravel]

// Case sensitive — PHP ≠ php
$mixed = ["PHP", "php", "Php"];
print_r(array_unique($mixed)); // सब अलग माने जाएंगे!

// Case-insensitive unique के लिए:
$lower = array_map("strtolower", $mixed);
$unique = array_values(array_unique($lower));
print_r($unique); // [php] — एक ही
?>
array_unique() — REAL WORLD EXAMPLES
<?php
// 1. Blog tags deduplicate
$allTags = ["PHP", "Web", "PHP", "MySQL", "Web", "Laravel"];
$uniqueTags = array_values(array_unique($allTags));
echo implode(", ", $uniqueTags); // PHP, Web, MySQL, Laravel

// 2. Unique user IDs
$viewerIds = [1, 5, 2, 1, 3, 5, 4, 2];
$unique = array_values(array_unique($viewerIds));
echo "Unique viewers: " . count($unique); // 5

// 3. Emails deduplicate (newsletter)
$emails = ["a@g.com", "b@g.com", "a@g.com", "c@g.com"];
$unique = array_values(array_unique($emails));
echo count($unique) . " unique subscribers"; // 3
?>

6
array_flip() — Keys और Values बदलना
flip
()

array_flip()

Array की keys values बन जाती हैं और values keys — swap! Lookup tables बनाने, value से key ढूँढने, और reverse mapping के लिए।

PHP 4+ Returns: flipped array Lookup Tables
["a"=>1, "b"=>2]
array_flip()
[1=>"a", 2=>"b"]
array array_flip( array $array )
array_flip() — EXAMPLES
<?php
// Basic flip
$fruits = ["Apple", "Mango", "Banana"];
$flipped = array_flip($fruits);
print_r($flipped);
// ["Apple"=>0, "Mango"=>1, "Banana"=>2]

// Associative flip
$countryCodes = ["IN" => "India", "US" => "USA", "UK" => "England"];
$nameToCode = array_flip($countryCodes);
echo $nameToCode["India"]; // IN
echo $nameToCode["USA"]; // US

// Duplicate values — last one wins
$arr = ["a" => 1, "b" => 1, "c" => 2];
print_r(array_flip($arr));
// [1=>"b", 2=>"c"] — "a" overwritten by "b"
?>
array_flip() — REAL WORLD EXAMPLES
<?php
// 1. Fast value lookup — array_flip से O(1) lookup
$allowedRoles = ["admin", "editor", "moderator"];
$roleIndex = array_flip($allowedRoles);
// {"admin"=>0, "editor"=>1, "moderator"=>2}

$userRole = "editor";
if (isset($roleIndex[$userRole])) {
  echo "✅ Valid role"; // isset is faster than in_array!
}

// 2. Error codes to messages
$messages = [
  "NOT_FOUND" => 404,
  "SERVER_ERROR" => 500,
  "FORBIDDEN" => 403,
];
$codes = array_flip($messages);
echo $codes[404]; // NOT_FOUND
echo $codes[500]; // SERVER_ERROR

// 3. Position by value (without array_search)
$students = ["Rahul", "Priya", "Amit"];
$byName = array_flip($students);
echo $byName["Priya"]; // 1 (index)
?>
💡 Performance Tip: isset($flipped[$value]) array_flip के बाद in_array($value, $arr) से बहुत faster है — O(1) vs O(n)। Large arrays में यह difference बड़ा होता है। Frequent lookups के लिए array_flip + isset pattern use करो।

7
Chaining — Functions एक साथ Use करना
Functional style में इन functions को chain करके complex operations एक expression में लिख सकते हैं।
CHAINING — Complex Operations
<?php
$orders = [
  ["id" => 1, "amount" => 1200, "status" => "paid"],
  ["id" => 2, "amount" => 850, "status" => "pending"],
  ["id" => 3, "amount" => 2100, "status" => "paid"],
  ["id" => 4, "amount" => 450, "status" => "cancelled"],
  ["id" => 5, "amount" => 3000, "status" => "paid"],
];

// Step 1: filter — सिर्फ "paid" orders
$paidOrders = array_filter($orders, fn($o) => $o["status"] === "paid");

// Step 2: map — सिर्फ amounts extract करो
$amounts = array_map(fn($o) => $o["amount"], $paidOrders);

// Step 3: reduce — total calculate करो
$revenue = array_reduce($amounts, fn($c, $i) => $c + $i, 0);

echo "Paid orders: " . count($paidOrders); // 3
echo "Total revenue: ₹" . number_format($revenue, 2); // ₹6,300.00

// One-liner version!
$total = array_reduce(
  array_filter($orders, fn($o) => $o["status"] === "paid"),
  fn($c, $o) => $c + $o["amount"],
  0
);
echo "Revenue: ₹" . number_format($total, 2); // ₹6,300.00
?>
Functional Chain Pattern: filter (unwanted हटाओ) → map (transform करो) → reduce (aggregate करो)

8
Quick Reference — सभी Functions
FunctionInput → OutputReturnsBest Use
array_map()[1,2,3] + fn×2 → [2,4,6]new array (same size)Transform हर element
array_filter()[1,2,3,4] + fn>2 → [3,4]filtered array (smaller)Condition से remove
array_reduce()[1,2,3] + sum → 6single valueAggregate/total
array_unique()[1,2,2,3] → [1,2,3]deduplicated arrayDuplicates हटाना
array_flip()["a"=>1] → [1=>"a"]flipped arrayLookup tables
map = same size, filter = smaller size, reduce = single value — यह तीन rules याद रखो!

निष्कर्ष

Functional Array Functions modern PHP का core हैं। इन्हें सीखने से code shorter, readable, और testable होता है। Laravel, Symfony जैसे frameworks में यह style everywhere है।

array_map() — Transform। Same size। Original नहीं बदलता।

array_filter() — Filter। Smaller size। Keys preserve होती हैं — array_values() याद रखो।

array_reduce() — Aggregate। Single value। Initial value सही choose करो।

array_unique() — Deduplicate। array_values() के साथ use करो।

array_flip() — Fast lookup। isset() के साथ in_array() से faster।

Chaining — filter → map → reduce — complex problems एक expression में।

🚀 अगला: Chapter 8.3 — Array Sorting Functions — sort, rsort, asort, arsort, ksort, usort, uasort। सभी sorting functions detail में।