● Interactive Visual Simulation

Array vs Collection

Step-by-step animated simulation — দেখো কিভাবে কাজ করে, বুঝো কখন কোনটা লাগবে।

Memory তে কিভাবে থাকে?

Array = RAM এ পাশাপাশি boxes | Collection = Object header + Array data

🔬 Live RAM Allocation — দেখো কিভাবে memory নেয়
Array allocate
collect() wrap
তুলনা
RAM — 24 টি Slot (প্রতিটি = 8 bytes)
Array data
Collection metadata
Collection array copy
Free / other
Memory Usage — কে কতটা নেয়
📦 ARRAY — 0 bytes
🗂️ COLLECTION — 0 bytes
▷ "Animate Allocation" বাটন চাপো — দেখো RAM তে কী হয়
📦 Array — Contiguous Memory
RAM Layout
🍎
[0]
0x100
🍌
[1]
0x108
🍇
[2]
0x110
🍓
[3]
0x118
↔ পাশাপাশি, সমান 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
refcount
items
ptr →
methods
table →
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)
🍎
0x200
🍌
0x208
🍇
0x210
🍓
0x218
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
🍎
[0]
🍌
[1]
🍇
[2]
🍓
[3]
▷ "Array[2] খোঁজো" বাটন চাপো
Collection — Object → Pointer → Array
Collection Object
——›
items array
🍎
[0]
🍌
[1]
🍇
[2]
🍓
[3]
▷ "Collection->get(2) খোঁজো" বাটন চাপো
💡 Core Insight
📦
ARRAY
Plain data
~32 bytes

collect()
🗂️
COLLECTION
Array + Object
~88 bytes
Collection আসলে Array কেই wrap করে — extra memory নেয় কিন্তু কোড অনেক সুন্দর হয়

Operations — Step by Step দেখো

Button চাপো, animation দেখো, বুঝে নাও।

➕ PUSH — নতুন element যোগ করা
Array — array_push() / $arr[]
Live Simulation
Memory — Contiguous
▷ Button চাপো array তে 99 push হবে
Collection — ->push()
Live Simulation
Collection Object
▷ Button চাপো collection তে 99 push হবে
🔍 FILTER — শুধু বড় numbers রাখো (> 30)
Array — array_filter()
Step Simulation
Checking each item
▷ Filter শুরু করতে Next Step চাপো
Collection — ->filter()
Step Simulation
Checking each item
▷ 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
Input
Alice/22/F
Bob/35/M
Carol/28/F
Dan/19/M
Eva/31/F
filter(age≥25)
?
?
?
map(name only)
?
?
?
sortBy(name)
?
?
?
▷ "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
TypePrimitiveObject / 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 PHPLaravel / 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 বেছে নাও

Numbers (comma separated)
Operation
 
📦 Array Result
Run করো...
🗂️ Collection Result
Run করো...