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।
📋 इस Article में क्या-क्या है
- Functional Style क्या है?
- array_map() — Transform
- array_filter() — Filter
- array_reduce() — Reduce
- array_unique() — Duplicates हटाना
- array_flip() — Keys-Values बदलना
- Chaining — Functions एक साथ
- Quick Reference + Combined Example
Functional Programming Style में loops की जगह functions use होते हैं। Code shorter, readable, और bug-free होता है। PHP 7.4 में आए Arrow Functions (fn() =>) से यह style और आसान हो गई।
❌ Old Style — foreach loops
$prices = [100, 200, 300];
$doubled = [];
foreach ($prices as $p) {
$doubled[] = $p * 2;
}
// 5 lines!
✅ New Style — array_map
$prices = [100, 200, 300];
$doubled = array_map(
fn($p) => $p * 2,
$prices
);
// 1 clean expression!
$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]
?>
// 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]
?>
$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"]
?>
// 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}]
?>
| Parameter | Description |
|---|---|
| $array | Input array |
| $callback | fn($carry, $item) — $carry = accumulator, $item = current element |
| $initial | Starting value of accumulator (0 for sum, "" for string, [] for array) |
$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
?>
// 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]]
?>
// 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] — एक ही
?>
// 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
?>
// 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"
?>
// 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)
?>
$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
?>
| Function | Input → Output | Returns | Best 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 → 6 | single value | Aggregate/total |
| array_unique() | [1,2,2,3] → [1,2,3] | deduplicated array | Duplicates हटाना |
| array_flip() | ["a"=>1] → [1=>"a"] | flipped array | Lookup tables |
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 में।