المصفوفات في بي اتش بي PHP Arrays

Ali Majrashiمنذ 8 سنوات

المصفوفة في PHP هي طريقة لتخزين قيم متعددة بمتغير واحد.

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

مثال:


<?php

$person = array('ali', 29, 'KSA');

echo "My name is $person[0] and i'm $person[1] years old and from $person[2]";

ماهي المصفوفة:

نستطيع تبسيط التعريف على ان المصفوفة عبارة عن متغير خاص يستطيع تخزين أكثر من قيمة.

ويمكن تبسيطها ايضا على ان المصفوفة تكون عبارة عن مفاتيح Keys وقيم Values حيث لكل مفتاح Key قيمة Value.

لنفرض ان لديك قائمة باسماء طلاب ، و ترغب بتخزينهم بمتغيرات ستكون بهذا الشكل:


$student1 = "Ahmed";
$student2 = "Khaled";
$student3 = "Mohammed";

ولكن ماذا لوكانت قائمة الطلاب فوق 100 طالب وليست فقط 3 ، و كنت تريد البحث في هذه القائمة عن طالب محدد وعرضه؟

الحل بكل بساطة هي بعمل مصفوفة لتخزين هذه القائمة ، حيث ان المصفوفة قادرة على تخزين العديد من القيم تحت متغير واحد ولكل قيمة يتم تعيين index number او مايعرف بمفتاح او مؤشر القيمة والذي عن طريقه نستطيع الوصول لاي قيمة والتعامل معها.

انشاء المصفوفات:

قبل ان نبدأ يجب ان تعلم أنه يوجد ٣ أنواع للمصفوفات في PHP:

  • Indexed arrays مصفوفة بمفاتيح عددية numeric index حيث انه كل مفتاح عددي يحتوي قيمة مخزنة.
  • Associative arrays عندما نقوم بتعريف اسم المفتاح named keys لكل قيمة نخزنها فإن المصفوفة تصبح من هذا النوع.
  • Multidimensional arrays وهي عبارة عن مصفوفة تحتوي على مصفوفات بداخلها.

في PHP نستطيع انشاء المصفوفات باستخدام الدالة array() وفي نسخ PHP الحديثة من الممكن ايضا استخدام الأقواس المربعه [] لإنشاء المصفوفات.

مثال:


<?php

$arr1 = array();

$arr2 = [];

$arr3[0] = 'text';

$arr4['text'] = 'some text';

Indexed arrays:

يوجد طريقتين لإنشاء مصفوفة من النوع Indexed arrays.

الطريقةالأولى:

يتم انشاء المصفوفة ويتم تعيين المفاتيح indexes بشكل تلقائي من قبل PHP حيث ان المفاتيح دائما تبدأ بصفر 0 .

مثال باستخدام الدالة array:


<?php

$person = array('Ali', 29, 'KSA');

مثال باستخدام الاقواس المربعة:


<?php

$person = ['Ali', 29, 'KSA'];

الطريقة الثانية:

ان نقوم بتعيين المفاتيح بشكل يدوي كالتالي:


<?php

$person[0] = 'Ali';
$person[1] = 29;
$person[2] = 'KSA';

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

مثال:


<?php

$person = array('ali', 29, 'KSA');

echo "My name is $person[0] and i'm $person[1] years old and from $person[2]";

عند عرض الملف بالمتصفح فإن الناتج كالتالي

1.png

Associative arrays:

المصفوفات من النوع Associative arrays تستخدم مسميات للمفاتيح named keys عند تخزين القيم.

يوجد طريقتين لإنشاء مصفوفة من النوع Associative arrays.

الطريقةالأولى:

نستطيع انشاء مصفوفات من النوع Associative arrays باستخدام الدالة array او الاقواس المربعة كالتالي:


<?php

$students = array("Ali"=>"29", "Khaled"=>"30", "Mohammed"=>"35");

// OR

$students = ["Ali"=>"35", "Khaled"=>"37", "Mohammed"=>"43"];

لاحظ في الأمثلة ان كل اسم يحتوي على قيمة مخزنة ، بحيث اننا قمنا بتعريف اسم المفتاح ثم استخدمنا علامة => لتخزين القيمة.

الطريقة الثانية:


<?php

$students['Ali'] = "29";
$students['Khaled'] = "30";
$students['Mohammed'] = "35";

لاحظ في الأمثلة ان كل اسم يحتوي على قيمة مخزنة.

ونستطيع استخدام هذه المسميات لطباعة القيم المخزنة كالتالي:


<?php

$students = array("Ali"=>"29", "Khaled"=>"30", "Mohammed"=>"35");

echo "Khaled is " . $students['Khaled'] . " years old.";

عند عرض الملف بالمتصفح فإن الناتج كالتالي

2.png

Multidimensional arrays:

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

نستطيع تبسيط هذا النوع بأنه عبارة عن مصفوفة تحتوي على مصفوفة او اكثر.

ملاحظة: PHP تستطيع فهم والتعامل مع مصفوفات من النوع Multidimensional arrays ، التي تحتوي على مصفوفة ، او مصفوفتين ، او ثلاث مصفوفات ، و حتى اربع ، و خمس مستويات من المصفوفات المخزنة ، لكن المصفوفات التي تحتوي على اكثر من 3 مستويات من المصفوفات المخزنة صعبة في التعامل من قبل اغلب المطورين.

كما ذكرنا يمكن تخزين عدة مستويات من المصفوفات داخل اي مصفوفة وبها يتم معرفة نوع المصفوفة وعدد المؤشرات او عدد المفاتيح التي نحتاجها للوصول الى القيمة المخزنة مثلا لو لدينا مصفوفة وداخلها خزنا مصفوفات في PHP نطلق على هذا النوع Two-dimensional Arrays ولو كان لدينا مصفوفة وبداخلها مصفوفات وبداخل هذه المصفوفات خزنا ايضا مصفوفات نطلق عليها اسم Three-dimensional array

مثال على Two-dimensional Arrays:

كما في الأمثلة السابقة نستطيع انشاء المصفوفات باستخدام الدالة  array او الاقواس المربعة:


<?php

$students = array(
	array('Ali', 29, 'KSA'),
  	array('Khaled', 30, 'KSA'),
  	array('Mohammed', 35, 'KSA')
);

// OR

$students = [
	['Ali', 29, 'KSA'],
  	['Khaled', 30, 'KSA'],
  	['Mohammed', 35, 'KSA']
];

كما ذكرنا انه على عدد المستويات المخزنة من المصفوفات نستطيع معرفة عدد المفاتيح التي نحتاج للوصول الى القيمة المخزنة والتعامل معها، في هذا النوع Two-dimensional Arrays نحتاج الى مفتاحين للوصول الى القيمة وعرضها بالمتصفح كالتالي:


<?php

$students = array(
	array('Ali', 29, 'KSA'),
  	array('Khaled', 30, 'KSA'),
  	array('Mohammed', 35, 'KSA')
);

echo $students[0][0] . " is " . $students[0][1] . " years old and from " . $students[0][2] . "<br>";
echo $students[1][0] . " is " . $students[1][1] . " years old and from " . $students[1][2] . "<br>";
echo $students[2][0] . " is " . $students[2][1] . " years old and from " . $students[2][2] . "<br>";

عند عرض الملف بالمتصفح فإن الناتج كالتالي

3.png

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

لاحظ في الأمثلة السابقة قمنا باستخدام الدالة echo لطباعة القيم للمتصفح باستخدام مفاتيح المصفوفة مباشرة ، و لكن احيانا نرغب بالتعامل مع جميع العناصر المخزنة بالمصفوفة بشكل ديناميكي وأكثر مرونة ، هنا سوف نستخدم حلقات التكرار Loop للتعامل مع المصفوفات ، يمكن الاستفادة من هذا الدرس للتعرف بشكل اكبر عن التكرار في PHP.

https://3alam.pro/series/php/php-basics/php-loops/

نستطيع استخدام كل من for و foreach للتعامل مع المصفوفات ، و لكن يفضل استخدام foreach ؛ و السبب انها مخصصة للتعامل مع المصفوفات.

Indexed arrays:


<?php

$person = array('Ali', 'Khaled', 'Mohammed');

// for loop example
for ($i=0; $i < count($person); $i++) { 
	echo $person[$i] . '<br>';
}

// foreach loop example
foreach ($person as $value) {
	echo $value . '<br>';
}

عند عرض الملف بالمتصفح فإن الناتج كالتالي

4.png

Associative arrays:

يفضل استخدام foreach للحصول على المفاتيح والقيم والتعامل معهم


<?php

$students = array("Ali"=>"29", "Khaled"=>"30", "Mohammed"=>"35");

// foreach example
foreach ($students as $key => $value) {
	echo $key . " is " . $value . " years old. <br>";
}

عند عرض الملف بالمتصفح فإن الناتج كالتالي

5.png

Multidimensional arrays:


<?php

$students = array(
	array('Ali', 29, 'KSA'),
  	array('Khaled', 30, 'KSA'),
  	array('Mohammed', 35, 'KSA')
);

// for eaxample
for ($row = 0; $row < count($students); $row++) {
	echo "<p><b>Row number $row</b></p>";
		for ($col = 0; $col < count($students[$row]); $col++) {
		echo $students[$row][$col] . "<br>";
	}
}

// foreach eaxample
foreach ($students as $student) {
	echo "<p><b>Student Information</b></p>";
	foreach ($student as $key => $value) {
		echo $value . "<br>";
	}
}

عند عرض الملف بمثال for بالمتصفح فإن الناتج كالتالي

6-1.png

عند عرض الملف بمثال foreach بالمتصفح فإن الناتج كالتالي

6-2.png

التعليقات (1)

zero web:

nice lesson

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !