انتقل إلى محتوى الدرس

Reindexing Caveat of array_shift أثر إعادة ترقيم المفاتيح الرقمية عند استخدام array_shift

تحكم في أطراف المصفوفة عبر array_push وarray_pop وarray_shift وarray_unshift، واقتطع أو استبدل الشرائح بـ array_slice وarray_splice.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

على عكس unset()، تقوم كل من array_shift() وarray_unshift() بإعادة ترقيم جميع المفاتيح الرقمية تلقائياً لتبدأ من 0 مع إبقاء المفاتيح النصية كما هي.

  • إذا كانت المصفوفة تستخدم معرفات رقمية كمفاتيح (مثل [104 => "Laptop", 209 => "Mouse"])، فإن استدعاء array_shift() يمسح تلك المعرفات ويعيد ترقيم الباقي إلى 0, 1, ....
  • تتطلب إعادة الترقيم تحديث جميع العناصر بزمن O(n)، مما يجعل تكرار array_shift() بطيئاً مع المصفوفات الضخمة.
  • لحذف العنصر الأول دون المساس بالمفاتيح الرقمية، استخرج المفتاح الأول بـ array_key_first($arr) ثم احذفه بـ unset().

أعادت array_shift() ترقيم المفتاح الرقمي 208 ليصبح 0 وأبقت المفتاح النصي "vip"، بينما حافظت unset() مع array_key_first() على المفتاح 208.

PHP
<?php
$tickets = [104 => "Login Bug", 208 => "CSS Glitch", "vip" => "Outage"];
array_shift($tickets);
print_r($tickets);

$safe = [104 => "Login Bug", 208 => "CSS Glitch"];
unset($safe[array_key_first($safe)]);
echo "Preserved key: " . array_key_first($safe) . "\n";