البي أتش بي من الصفر الدرس السادس المصفوفات

في الكاتب: و مدرجة تحت التنصيف PHP, دروس.

بسم الله والصلاة والسلام على رسول الله.

هذا الدرس جزء من سلسلة البي أتش بي من الصفر:

نبدأ اليوم الدرس السادس في سلسلة تعلم البي أتش بي من الصفر.

أقسام الدرس:

  • ما هي المصفوفة وفائدتها.
  • فائدة المصفوفات.
  • كيفية تعريف المصفوفة.
  • شروط تسمية المفاتيح.
  • قراءة القيم المخزنة.
  • تعديل القيم المخزنة.
  • حذف القيم المخزنة.
  • بعض الدوال المفيدة

ما هي المصفوفة وفائدتها:

المصفوفة هي متغير من نوع خاص، يمكنه الإحتفاظ بأكثر من قيمة في وقت واحد. وتستخدم غالبا في الإحتفاظ بعدة قيم متعلقة –أوغير متعلقة- ببعضها البعض، ولايمكن الإحتفاظ بكل قيمة في متغير منفصل مثلا لكثرة هذه القيم.

ومن فوائدها كما ذكرنا الإحتفاظ بالقيم المتعلقة ببعضها في متغير واحد. وأيضا سهولة الوصول لكل هذه القيم وسهولة عملية البحث عن قيمة معينة حيث أن كل قيمة مخزنة في المصفوفة يوجد مفتاح فريد لا يتكرر يساعدنا بالوصول لهذه القيمة.

مثال إذا أردنا تخزين مجموعة مكونة من 12 لونا لنستخدمها في برنامجنا لغرض ما. فإذا قمنا بتخزين كل لون في متغير منفصل يصبح لدينا 12 متغير منفصل كل منها يحمل لون واحد فإذا أردنا طباعة هذه الألوان أو البحث عن لون معين يجب علينا تذكر جميع أسماء المتغيرات التي تحمل هذه الألوان. أما إذا قمنا بإستخدام مصفوفة لتخزين هذه الألوان فسوف نقوم بوضعها جميعا في مكان واحد مما يسهل الوصول إليها لغرض الطباعة أو البحث مثلا.

<?php

//غير مجدية ومضيعة للوقت

$color1 = "red";

$color2 = "green";

$color3 = "yellow";

$color4 = "pink";

$color5 = "blue";

$color6 = "black";

$color7 = "brown";

$color8 = "gray";

$color9 = "white";

$color10 = "purple";

$color11 = "orange";

$color12 = "violet";

?>

أنواع المصفوفات:

يوجد ثلاثة أنواع رئيسية للمصفوفات

1-      المصفوفة المفهرسة (Indexed Arrays): وهي أبسط أنواع المصفوفات تحتوى على قيم مخزنة وتكون قيم المفاتيح رقمية فقط.

2-      المصفوفة الترابطية (Associative Arrays): تختلف من المصفوفة المفهرسة في أن قيم المفاتيح الخاصة بها قد تكون سلاسل نصية أو أرقام ونصوص.

3-      المصفوفة متعددة الأبعاد (Multidimensional Arrays): وهي عبارة عن مصفوفة ولكن أحد القيم المخزنة فيها أو أكثر تكون من نوع مصفوفة أيضا.

سنقوم بشرح المصفوفات المفهرسة والترابطية في هذا الدرس وطرق التعامل معهما.

*يجدر الإشارة أن البي أتش بي لا تفرق بين المصفوفات المفهرسة والمصفوفات الترابطية.

كيفية إنشاء مصفوفة:

لكي نقوم بإنشاء مصفوفة في بي أتش بي نستخدم الدالة array();، وتقوم هذه الدالة بإستقبال أي عدد من القيم مع مفاتيحها مفصولة بعلامة فاصلة “,” ومخرجات هذه الدالة هي مصفوفة بالقيم التي تم تزويدها بها وفي حالة عدم تحديد قيم للمفاتيح تقوم بإسناد مفتاح لكل قيمة بداية من صفر إلى عدد القيم -1.

<?php
$colors = array("red","green","yellow","pink","blue","black","brown","gray","white","purple","orange","violet");
var_dump($colors);
?>

إبتداء من PHP 5.4 يمكننا إستخدم الصيغة المختصرة لإنشاء المصفوفة. فبدلا من إستخدام الدالة array() يمكننا الآن إستخدام الأقواس “[ ]” فقط فيصبح المثال السابق بالشكل التالي

<?php
$colors = ["red","green","yellow","pink","blue","black","brown","gray","white","purple","orange","violet"];

var_dump($colors);
?>

في المثالين السابقين قمنا بإنشاء مصفوفة مفهرسة أي مصفوفة تخزن قيم وتكون كافة قيم المفاتيح رقمية. ماذا لو أردنا إنشاء مصفوفة ترابطية كيف سيتم هذا؟ سنقوم بإستخدام نفس الدالة array() ولكن في هذه المرة سنقوم بتحديد قيم المفاتيح التي نرغب فيها. فلو أردنا تخزين أسماء السيارات التي يقودها عدة أفراد يمكننا إستخدام إسم الشخص كمفتاح و يكون نوع السيارة التي يقودها هو القيمة. مثال:

<?php

$cars = array("Mohamed" => "Porsche", "Ahmed" => "BMW", "Ali" => "Lamborghini");

var_dump($cars);

?>

تسمية مفاتيح المصفوفة:

هناك عدة شروط أو نقاط نحتاج لتوضيحها عند القيام بتسمية المفاتيح في المصفوفة أو عندما تقوم بي أتش بي بتوليد المفاتيح تلقائيا لنا، حتى لا نقع في بعض الإخطاء أو تكون المخرجات المتوقعة غريبة وغير مفهومة بالنسبة لنا:

  • المفاتيح دائما تكون إما رقم صحيح أو نص فقط.
  • في حالة كانت قيمة المفتاح رقم صحيح ولكن تم كتابته كنص فسيتم تحويله تلقائيا لرقم مثلا “623” سيتم تحويلها إلى 623 كرقم، ولكن “0623” ستظل كما هي ولن يتم تحويلها إلى رقم.
  • الأرقام التي تحتوي على فاصة عشرية سيتم دائما تحويلها إلى أرقام صحيحة بإسقاط الفاصلة العشرية والإبقاء على الرقم الصحيح مثلا 3.24 ستصبح 3.
  • المفاتيح من نوع المنطقي true أو false سيتم تحويلها إلى رقم حيث أن true=1 و false=0.
  • القيمة Null عند إستخدامها كمفتاح سيتم تحويلها إلى نص خالي “”.
  • لايمكن إستخدام المصفوفات والكائنات كمفاتيح وإستخدامها سينتج عنه تحذير من نوع “Illegal offset type”.
  • عند إستخدام نفس المفتاح في المصفوفة مع أكثر من قيمة فقط آخر قيمة تم إسنادها لهذا المفتاح سيتم تخزينها.
  • عند توليد المفاتيح الرقمية تلقائيا من قبل بي أتش بي يبدأ توليد القيم الرقمية من أكبر رقم تم إستخدامه من قبل في المصفوفة +1 –حتى إذا تم حذفه-. فإذا كانت المصفوفة جديدة أو لم يتم إستخدام مفتاح رقمي فيها من قبل يبدأ التوليد من الرقم صفر، أما إذا كانت مصفوفة قد تم إستخدام مفاتيح رقمية من قبل فيبدأ التوليد من أكبر رقم+1 حتى إذا تم مسحه، بمعنى لو كان لدينا قيمة ويشير إليها المفتاح رقم 71 أكبر مفتاح حاليا في المصفوفة وقمنا بحذف القيمة والمفتاح فعند توليد مفتاح رقمي جديد من قبل البي أتش بي يكون 72.

قراءة القيم المخزنة:

لتتمكن من قراءة القيم المخزنة في المصفوفة نقوم بإستخدام إسم المتغير وتحديد قيمة المفتاح للقيمة المخزنة بين قوسين “[]” أو “{}” فإذا أردنا قراءة أول لون في مصفوفة الألوان التي قمنا بإنشاءها في المثال السابق:

<?php

echo $colors[0];

?>

أما إذا أردنا طباعة كافة الألوان المخزنة في المصفوفة فيمكننا إستخدام حلقة تكرارية للقيام بهذا. مثال:

<?php

for($i=0; $i<count($colors); $i++)

{

echo $colors [$i].’<br />’;

}

?>

قد تنفع الحلقة التكرارية for في قراءة قيم المصفوفة في حالة كانت قيم مفاتيح المصفوفة رقمية ومتتالية لكن كيف سنتصرف إذا كانت القيم غير رقمية. نصية على سبيل المثال؟ أو رقمية ولكن غير متتالية؟ في هذه الحالة نستخدم الحلقة التكرارية foreach لقراءة قيم المفاتيح والمصفوفة معا. مثال:

<?php

foreach($cars as $key => $car)

{

echo ‘name = ‘. $key .’ and car = ‘. $car .’ <br />’;

}

?>

في المثال السابق تقوم الحلقة التكرارية foreach بقراءة قيمة من المصفوفة في كل دورة وتخزين قيم المفتاح “إسم الشخص” في المتغير $key وتخزين القيمة الفعلية “إسم السيارة في المثال” في المتغير $car ويمكننا قراءة القيم من هذه المتغيرات وإستخدامها بالطريقة التي نريد، طباعتها مثلا!.

تعديل القيم المخزنة:

للتعديل على القيم المخزنة في المصفوفة نقوم فقط بكتابة المتغير مع تحديد إسم المفتاح للقيمة المراد تغيرها بين قوسين []. فلو فرضنا أن محمد في المثال السابق قام بتغير نوع سيارته من بورش إلى مرسيدس-بنز سنحتاج للقيام بالتالي لتغيير نوع السيارة التي يقودها:

<?php

$cars[‘Mohamed’] = “Mercedes-Benz”;

?>

حذف القيم المخزنة:

لحذف المفتاح والقيمة المخزنة في المصفوفة أو حذف كامل المصفوفة نستخدم الدالة unset() وتستقبل الدالة إما المتغير الذي يحتوى على المصفوفة لوحده لحذف كامل المصفوفة أو المتغير مع تحديد المفتاح لحذف المفتاح والقيمة المخزنة معه فقط. فلو إفترضنا أن أحمد قد قام ببيع سيارته ولا يملك أي سيارة حاليا وأردنا حذفه من المصفوفة نقوم بالآتي:

<?php

unset($cars[“Ahmed”]);

?>

ولو قام الجميع ببيع سياراتهم وأردنا حذف المصفوفة بالكامل نقوم بالتالي:

<?php

unset($cars);

?>

بعض الدوال المفيدة:

هناك بعض الدوال المفيدة عند التعامل مع المصفوفات سنقوم بذكر البعض منها هنا:

count():

تستقبل هذه الدالة متغير من نوع مصفوفة كمعطيات وتقوم بإرجاع عدد صحيح عبارة عن عدد القيم المخزنة في هذه الدالة. مثال

<?php

echo count($colors);

//النتيجة 12 عدد الألوان المخزنة في المصفوفة في الأمثلة السابقة.

?>

in_array():

تستقبل هذه الدالة معطيان، الأول عبارة عن قيمة معينة، الثاني عبارة عن مصفوفة وتقوم هذه الدالة بالبحث عن هذه القيمة داخل المصفوفة فإذا وجدت القيمة تقوم بإرجاع true وإذا لم توجد يتم إرجاع القيمة false.

<?php

if(in_array(“red”, $colors))

{

echo “The color is found in this array”;

}

else

{

echo “the color in not found in this array”;

}

?>

array_key_exist():

هذه الدالة تقوم بنفس ما تقوم به الدالة in_array() ولكن بدل البحث في القيم المخزنة تقوم بالبحث في المفاتيح عن مفتاح معين وتقوم بإرجاع true في حالة إيجاد المفتاح و false في حالة عدم إيجاده

<?php

if(array_key_exist (13, $colors))

{

echo “The key is found in this array”;

}

else

{

echo “the key in not found in this array”;

}

?>

array_unique():

تستقبل هذه الدالة معطى واحد فقط من نوع مصفوفة وتقوم بحذف القيم المكررة وترجع مصفوفة خالية من التكرار. الجدير بالذكر هنا أنه في حالة وجود قيمتين متطابقتين يتم حذف القيمة الثانية أي أن القيمة الأولى مع المفتاح الذي يشير إليها هي التي ستبقى وسيتم حذف القيمة الثانية مع المفتاح الذي يشير إليها.

<?php

$duplicate_array = array(“first Duplicate” => “1”, “Second Duplicate” => “1”);

$unique_array = array_unique($duplicate_array);

var_dump($unique_array);

?>

ويوجد العديد من الدوال الأخرى المفيدة التي تساعد على التعامل مع المصفوفات وتمكنك من القيام من العديد من الأشياء، وأيضا بعض الدوال التي قمنا بذكرها هنا تستقبل معطيات إختيارية تساعدك على إستخدامها بصورة أفضل إبحث عنها حتى تتعلم المزيد.

 

بهذا نكون قد وصلنا إلى ختام درسنا، ترقبو الدرس القادم عن إستلام البيانات من المتصفح POST & GET.

محمد علي

مبرمج ومطور ويب، يقوم بتطوير أنظمة مبنية على الويب. يستخدم كود إيقنايتر فريم وورك بصورة أساسية. وبالتأكيد مدمن قهوة :-)

More Posts - Twitter

أضف تعليقاً

  • (لن يتم نشره)