● Interactive Visual Simulation
Array vs Collection
Step-by-step animated simulation — দেখো কিভাবে কাজ করে, বুঝো কখন কোনটা লাগবে।
🧠 Memory
⚙️ Operations
🔗 Chaining
🏗️ Real Examples
📊 Compare
🎮 Playground
Memory তে কিভাবে থাকে?
Array = RAM এ পাশাপাশি boxes | Collection = Object header + Array data
🔬 Live RAM Allocation — দেখো কিভাবে memory নেয়
Array allocate
collect() wrap
তুলনা
RAM — 24 টি Slot (প্রতিটি = 8 bytes)
Memory Usage — কে কতটা নেয়
▷ "Animate Allocation" বাটন চাপো — দেখো RAM তে কী হয়
📦 Array — Contiguous Memory
RAM Layout
↔ পাশাপাশি, সমান gap — প্রতিটা 8 bytes, total = 4×8 = 32 bytes
// PHP Array
$fruits = ['🍎', '🍌', '🍇', '🍓'];
// Index দিয়ে সরাসরি access — O(1)
echo $fruits[2]; // → 🍇
// Math: 0x100 + (2 × 8) = 0x110 ✓
Contiguous
O(1) Access
~32 bytes
🗂️ Collection — Object + Array
RAM Layout
Collection Object Header (~56 bytes)
class pointer
— বলে "এটা কোন class এর object?" → PHP জানে এটা Collection, তাই তার methods (filter, map…) পাওয়া যায়। ~8 bytes
refcount
— কতগুলো variable এই object কে ধরে আছে তার হিসাব। count শূন্য হলে PHP memory free করে দেয়। ~8 bytes
items ptr →
— actual data কোথায় আছে তার address (pointer)। এর মাধ্যমে Collection তার ভেতরের array তে পৌঁছায়। ~8 bytes
methods table →
— filter(), map(), sort() সহ সব method এর pointer table। এই table ছাড়া chaining কাজ করত না। ~32 bytes
↓ items pointer টি নিচে point করে
Wrapped Array Data (~32 bytes)
Object header (~56B) + Array data (32B) = মোট ~88 bytes — প্রায় 2.75× বেশি!
// Laravel Collection
$fruits = collect(['🍎', '🍌', '🍇', '🍓']);
// Object টা পয়েন্টার দিয়ে array access করে
$first = $fruits->first(); // → 🍎
Object Wrapper
Chainable
~88 bytes
⚡ Index Access — কিভাবে element খোঁজে?
Array — Direct Formula
▷ "Array[2] খোঁজো" বাটন চাপো
Collection — Object → Pointer → Array
Collection Object
——›
items array
▷ "Collection->get(2) খোঁজো" বাটন চাপো
💡 Core Insight
📦
ARRAY
Plain data
~32 bytes
🗂️
COLLECTION
Array + Object
~88 bytes
Collection আসলে Array কেই wrap করে — extra memory নেয় কিন্তু কোড অনেক সুন্দর হয়
Operations — Step by Step দেখো
Button চাপো, animation দেখো, বুঝে নাও।
➕ PUSH — নতুন element যোগ করা
Array — array_push() / $arr[]
▷ Button চাপো array তে 99 push হবে
Collection — ->push()
▷ Button চাপো collection তে 99 push হবে
🔍 FILTER — শুধু বড় numbers রাখো (> 30)
Array — array_filter()
▷ Filter শুরু করতে Next Step চাপো
Collection — ->filter()
▷ Filter শুরু করতে Next Step চাপো
$nums = [15, 42, 8, 67, 23, 91];
$big = array_filter(
$nums,
fn($v) => $v > 30
); // [42, 67, 91]
$nums = collect([15, 42, 8, 67, 23, 91]);
$big = $nums
->filter(fn($v) => $v > 30);
// Collection: [42, 67, 91]
Method Chaining — Collection এর সবচেয়ে বড় সুবিধা
একটার পর একটা operation chain করো — কোড পরিষ্কার থাকে
🔗 Collection Pipeline — Animated
▷ "Run Pipeline" বাটন চাপো
😓 Array দিয়ে (কঠিন, ugly)
$users = [...];
// Nested — পড়তে কষ্ট লাগে
$names = array_column(
usort(
array_filter(
$users,
fn($u) => $u['age'] >= 25
),
fn($a,$b) => strcmp($a['name'],$b['name'])
),
'name'
);
😍 Collection দিয়ে (সুন্দর, readable)
$users = collect([...]);
// Chained — পড়তে সহজ
$names = $users
->filter(fn($u) => $u['age'] >= 25)
->sortBy('name')
->pluck('name')
->values();
Real Laravel Examples
Actual code যা তুমি project এ ব্যবহার করবে
⚙️
Config / Settings Store
Simple key-value data — Array-ই best। কোনো method chain দরকার নেই।
// config/app.php
return [
'name' => 'MyApp',
'debug' => true,
'timezone' => 'Asia/Dhaka',
];
🗄️
Eloquent Query Results
DB থেকে আসা data সবসময় Collection। Filter, sort, pluck — সব easy।
User::where('active', true)->get()
->sortBy('name')
->pluck('email');
🔁
Simple Loop / Counter
সংখ্যা গোনা, simple iteration — Array দিয়ে করো, faster।
$scores = [85, 92, 78, 96, 88];
$total = array_sum($scores);
$avg = $total / count($scores);
📊
API Response Formatting
Data transform করে JSON পাঠাতে — Collection perfect।
$orders->map(fn($o) => [
'id' => $o->id,
'total' => $o->total,
'status' => $o->status,
])->toArray();
🌐
Route / Middleware List
Static string list — plain array যথেষ্ট।
$middleware = [
'auth',
'throttle:60,1',
'verified',
];
📦
Cart / Order Processing
Filter, sum, group — Collection এ অনেক সহজ।
$cart->filter(fn($i) => $i->active)
->groupBy('category')
->map(fn($g) => $g->sum('price'));
🔄 CONVERT — যেকোনো সময় বদলাও
Array → Collection
$arr = [1, 2, 3];
$col = collect($arr);
// এখন সব methods available!
Collection → Array
$col = collect([1, 2, 3]);
$arr = $col->toArray();
// Plain PHP array
Head-to-Head Comparison
সব পার্থক্য এক জায়গায়
| Feature |
📦 Array |
🗂️ Collection |
| Type | Primitive | Object / Class |
| Memory (4 items) | ~32 bytes | ~88 bytes (2.75×) |
| Speed (raw ops) | ✓ দ্রুত | ~ একটু ধীর |
| Method Chaining | ✗ নেই | ✓ আছে |
| Readable Code | ~ মাঝারি | ✓ অনেক সুন্দর |
| Eloquent Output | ✗ নয় | ✓ Auto returned |
| Lazy Evaluation | ✗ নেই | ✓ LazyCollection |
| Custom Macros | ✗ নেই | ✓ আছে |
| toJson() | json_encode() | ✓ Built-in |
| Framework needed | ✓ Pure PHP | Laravel / tightenco |
📦 ARRAY — BEST FOR
✓ Config, settings
✓ Simple loops
✓ Small, fast scripts
✓ Laravel ছাড়া PHP
🗂️ COLLECTION — BEST FOR
✓ Eloquent results
✓ Complex filtering/sorting
✓ API responses
✓ Readable, maintainable code
🎮 Interactive Playground
নিজে চেষ্টা করো — numbers দাও, operation বেছে নাও
Operation
📦 Array Result
Run করো...
🗂️ Collection Result
Run করো...