المصفوفات في PHP

من موسوعة حسوب
< PHP
مراجعة 14:48، 6 يونيو 2018 بواسطة رؤيا-بنعطية (نقاش | مساهمات) (تعديلات تنسيقية)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

المصفوفة في PHP هي خريطة (map) مرتّبة، والخريطة هي نوع ترتبط فيه القيم مع المفاتيح، ولها استخدامات عديدة، فيمكن التعامل معها كمصفوفة أو قائمة (vector) أو جدول hash (نوع من الخرائط) أو قاموس (dictionary) أو مجموعة (collection) أو مكدس (stack) أو طابور (queue) وغير ذلك، حتى أن قيم المصفوفة يمكن أن تكون مصفوفات أخرى، ممّا يسمح بإنشاء مصفوفات متعددة الأبعاد.

لن نشرح جميع هذه الأنواع في هذا التوثيق، لكن ستجد مثالًا واحدًا على الأقل لكلٍ منها.

الصياغة

إنشاء المصفوفات باستخدام array()‎

يمكن إنشاء مصفوفة باستخدام البنية array()‎، وتأخذ هذه البنية أزواجا من المفاتيح والقيم (على الشكل key => value) مفصولةً بفاصلة لتُعدّ كوسائط لهذه البنية.

array(
  key  => value,
  key2 => value2,
   key3 => value3,
   ...
)

يمكن إضافة فاصلة بعد آخر عنصر في المصفوفة اختياريًا، ولا يفضل ذلك في المصفوفات المتكونة من سطر واحد. على سبيل المثال، يفضّل كتابة array(1, 2)‎ بدلًا من (array(1, 2,‎، وبالنسبة للمصفوفات متعددة الأسطر، فمن الشائع استخدام الفاصلة الزائدة لتسهيل عملية إضافة عناصر جديدة في آخر المصفوفة.

بدءًا من الإصدار 5.4 من PHP أصبح بالإمكان استخدام صياغة قصيرة للمصفوفة، وذلك باستخدام القوسين المربعين [] بدلًا من البنية array()‎.

المثال 1: مصفوفة بسيطة

<?php
$array = array(
   "foo" => "bar",
   "bar" => "foo",
);

// بدءًا من الإصدار 5.4

$array = [
   "foo" => "bar",
   "bar" => "foo",
];
?>

المفتاح يمكن أن يكون عددًا صحيحًا أو سلسلةً نصيةً، وأما القيمة فيمكن أن تكون من أي نوع.

يحوّل المفتاح قسريًا (أي تُجرى عليه عملية cast) في الحالات التالية:

  • السلاسل النصية التي تحتوي على أعداد صحيحة عشرية صالحة، ما لم يسبق الرقم بعلامة + فإنه سيحوّل إلى نوع عدد صحيح، على سبيل المثال المفتاح "8" سيخزّن على شكل 8، ومن ناحية أخرى فإن "08" لن يحوّل لأنه ليس عددًا صحيحًا عشريًا صالحًا.
  • ستحوّل الأعداد العشرية (float) إلى أعداد صحيحة أيضًا، وهذا معناه أنه سيقتطع الجزء الذي يأتي بعد الفاصلة، فعلى سبيل المثال ستُخزَّن القيمة التي لها المفتاح  8.7 في المفتاح 8.
  • ستحوّل القيم المنطقية إلى أعداد صحيحة أيضًا، فعلى سبيل المثال، المفتاح true سيخزّن على شكل 1 والمفتاح false سيخزّن على شكل 0.
  • أما القيمة Null فستحوّل إلى سلسلة نصية فارغة، على سبيل المثال المفتاح null سيخزّن على شكل "".
  • لا يمكن استخدام المصفوفات والكائنات كمفاتيح، وسيظهر لك تحذير عند استخدامها (warning: Illegal offset type).

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

المثال 2: تحويل النوع والكتابة فوق العناصر

<?php
$array = array(
    1    => "a",
   "1"  => "b",
   1.5  => "c",
   true => "d",
);

var_dump($array);
?>

مخرجات المثال السابق هي:

array(1) {
  [1]=>
  string(1) "d"
}

جميع المفاتيح في المثال السابق حُوِّلَت إلى 1، وسيُكتَب فوق قيم العناصر الجديدة (التي لها مفاتيح مكررة) وستبقى القيمة "d" الأخيرة مرتبطةً بالمفتاح 1.

يمكن للمصفوفات في PHP أن تحتوي على مفاتيح نصيّة أو عددية في نفس الوقت؛ ذلك لأنَّ لغة PHP لا تميز بين المصفوفات المفهرسة (indexed) والترابطية (associative).

المثال 3: استخدام مفاتيح نصيّة وعددية

<?php
$array = array(
   "foo" => "bar",
   "bar" => "foo",
   100   => -100,
   -100  => 100,
);

var_dump($array);
?>

مخرجات المثال السابق هي:

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

المفتاح اختياري، وإن لم يُحدَّد فستستخدم PHP قيمة آخر أكبر مفتاح عددي وتضيف عليه.

المثال 4: مصفوفة مفهرسة دون مفتاح

<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>

مخرجات المثال السابق هي:

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hello"
  [3]=>
  string(5) "world"
}

ومن الممكن أيضًا تحديد المفاتيح لبعض العناصر وترك البقية، كما في المثال الآتي.

المثال 5: تحديد المفاتيح لبعض العناصر فقط

<?php
$array = array(
        "a",
        "b",
   6 => "c",
        "d",
);

var_dump($array);
?>

مخرجات المثال السابق:

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

القيمة الأخيرة "d" أُسنِدَت للمفتاح 7، وهذا بسبب أن أكبر مفتاح على شكل عدد صحيح هو 6.

الوصول إلى عناصر المصفوفة باستخدام صيغة القوس المربع

يمكن الوصول إلى عناصر المصفوفة باستخدام صيغة array[key]‎.

المثال 6: الوصول إلى عناصر المصفوفة

<?php
$array = array(
    "foo" => "bar",
    42    => 24,
    "multi" => array(
       "dimensional" => array(
        "array" => "foo"
      )

    )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

مخرجات المثال السابق هي:

string(3) "bar"
int(24)
string(3) "foo"

ملاحظة: يمكن استخدام الأقواس المربعة [] أو المعقوفة {} للوصول إلى عناصر المصفوفة (أي يمكنك استخدام ‎$array[42]‎ أو ‎$array{42}‎).

بدءًا من الإصدار 5.4 من PHP، أصبح بالإمكان الوصول مؤشريًا (array dereference) إلى عناصر المصفوفة المُعادة من دالة مباشرةً، ففي السابق، كان يتطلب الأمر استخدام متغيرات مؤقتة.

المثال 7: إسناد مؤشري لمصفوفة

<?php
function getArray() {
  return array(1, 2, 3);
}

// PHP 5.4

$secondElement = getArray()[1];

// سابقًا

$tmp = getArray();
$secondElement = $tmp[1];

// أو

list(, $secondElement) = getArray();
?>

ملاحظة: ستظهر رسالة خطأ عند محاولة الوصول إلى مفتاح مصفوفة غير معرّفة كما في حالة الوصول إلى متغير غير معرّف، إذ سيظهر خطأ من نوع E_NOTICE والنتيجة ستكون NULL.

ملاحظة: إذا أُسند إلى المصفوفة مؤشرات ذات قيمة عددية وليس سلسلة نصية فإنها ستنتج القيمة NULL بصمت، دون إصدار رسالة خطأ.

صيغة إنشاء/تعديل المصفوفات باستخدام الأقواس المربعة

يمكن تعديل مصفوفة من خلال تعيين قيمة إلى مصفوفة مع تحديد المفتاح بين أقواس مربعة، ويمكن أيضًا حذف المفتاح، لتكون النتيجة زوجا فارغا من الأقواس المربعة [].

$arr[key] = value;
$arr[] = value;
// المفتاح هو عدد صحيح أو سلسلة نصية
// القيمة من أي نوع

ستُنشَأ المصفوفة ‎$arr إذا لم تكن موجودةً، وهذه طريقة أخرى لإنشاء مصفوفة لكن لا يُنصَح بها، لأنه إذا كانت المصفوفة ‎$arr تحتوي على بعض القيم (على سبيل المثال سلسلة نصية) فإن هذه القيمة ستبقى وستتحول هذه الصيغة إلى عملية وصول إلى عناصر السلسلة النصية بدلًا من إنشاء مصفوفة (string access operator)، ومن الأفضل دائمًا تهيئة متغيّر عبر عملية إسناد مباشرة.

ملاحظة: بدءًا من الإصدار 7.1.0، سيؤدي استخدام معامل فهرس (index operator) [] فارغ على سلسلة نصية إلى ظهور رسالة خطأ، فكانت السلسلة النصية تتحول إلى مصفوفة فيما سبق.

لتغيير قيمة ما من القيم الموجودة في المصفوفة، أسند قيمةً جديدةً إلى ذلك العنصر باستخدام مفتاحه، ولحذف زوج مفتاح/قيمة، استخدم دالة unset()‎.

<?php
$arr = array(5 => 1, 12 => 2);

// هذا التعبير يشبه التعبير
// $arr[13] = 56;
// في هذه المرحلة

$arr[] = 56;

// هذا التعبير سيضيف عنصرًا جديدًا إلى المصفوفة
// له المفتاح x

$arr["x"] = 42;

// هذا التعبير سيحدف عنصرًا من المصفوفة

unset($arr[5]);

// أما هذا التعبير فسيحدث المصفوفة كلها

unset($arr); 
?> 

ملاحظة: كما ذكرنا في الأعلى، إذا لم يحدد مفتاح معين، فستؤخذ قيمة أكبر مفتاح على شكل عدد صحيح، والمفتاح الجديد سيكون قيمة أكبر مفتاح + 1 (ويجب أن تكون على الأقل 0)، فإذا لم تُنشَأ مفاتيح بعد فستكون 0.

لاحظ أن أكبر قيمة مفتاح قد لا تكون موجودة حاليًا في المصفوفة، فقد تكون موجودةً في وقتٍ سابقٍ بعد آخر عملية إعادة فهرسة للمصفوفة، فسيستمر  منها حتى بعد حذفها كما في المثال التالي:

<?php

// إنشاء مصفوفة بسيطة.

$array = array(1, 2, 3, 4, 5);
print_r($array);

// حذف جميع العناصر دون تغيير خصائص المصفوفة

foreach ($array as $i => $value) {
    unset($array[$i]);
}
print_r($array);

// إضافة عنصر،لاحظ أن المفتاح الجديد هو 5 بدلًا من 0

$array[] = 6;
print_r($array);

// إعادة الفهرسة

$array = array_values($array);
$array[] = 7;
print_r($array);
?> 

مخرجات المثال السابق هي:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

دوال مفيدة

هنالك عدة دوال مفيدة للتعامل مع المصفوفات، راجع قسم دوال المصفوفة.

ملاحظة: تسمح لك دالة unset()‎ بحذف المفاتيح من مصفوفة، لكن انتبه لأن المصفوفة لن يعاد فهرستها، إذا أردت الحذف مع إعادة الفهرسة، فيمكن إعادة فهرسة المصفوفة باستخدام الدالة array_values()‎.

<?php
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
unset($a[2]);

/* ستنتج مصفوفة معرّفة كهذه
   $a = array(1 => 'one', 3 => 'three');
   وليس
   $a = array(1 => 'one', 2 =>'three');
<nowiki>*</nowiki>/

$b = array_values($a);

//array(0 => 'one', 1 =>'three')
?> 

تستخدم بنية foreach خصيصًا للمصفوفات، فهي توفِّر طريقةً سهلةً للتكرار داخل المصفوفة.

لا تستعمل الصيغة ‎$foo[bar]‎

استعمل علامات الاقتباس حول فهرس المصفوفة دومًا، والذي يكون على شكل سلسلة نصية، أي أن الصحيح كتابة ‎$foo['bar']‎ بدلًا من ‎$foo[bar]‎، وربما تجد هذه الصيغة شائعةً في السكربتات القديمة:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
//...
?>

على الرغم من أن الشيفرة السابقة خطأ إلا أنها تعمل، والسبب أن هذه الشفرة البرمجية لديها ثابت غير معرف وهو bar بدلًا من السلسلة النصية ("bar" لاحظ وجود علامتَي اقتباس تحيطان بالكلمة)، وتحوّل PHP تلقائيًا السلسلة النصية الخام (التي لا تحتوي على علامات اقتباس ولا تتوافق مع أي رمز معروف) إلى سلسلة نصية تحتوي على السلسلة النصية الخام، على سبيل المثال، إذا لم يكن هنالك ثابت معرّف باسم bar، فإنه فسيحوّل إلى السلسلة النصية "bar".

ملاحظة: هذا لا يعني أنه يجب وضع علامات الاقتباس دائمًا، فلا تضعها على الثوابت والمتغيرات، لأنَّ ذلك يمنع تفسيرها:

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', false);

// مصفوفة بسيطة

$array = array(1, 2);
$count = count($array);

for ($i = 0; $i < $count; $i++) {
    echo "\nChecking $i: \n";
    echo "Bad: " . $array['$i'] . "\n";
    echo "Good: " . $array[$i] . "\n";
    echo "Bad: {$array['$i']}\n"; 
   echo "Good: {$array[$i]}\n";
}
?>

ومخرجات المثال السابق هي:

Checking 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 1
Checking 1: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 2

المزيد من الأمثلة لتبيان هذا السلوك:

<?php

// إظهار جميع الأخطاء

error_reporting(E_ALL);
$arr = array('fruit' => 'apple', 'veggie' => 'carrot');

// صحيح

print $arr['fruit'];  // apple
print $arr['veggie']; // carrot

// خطأ.  سيعمل التعبير الآتي لكن سيظهر لك خطأ من نوع 
// E_NOTICE
// بسبب عدم تعريف الثابت 
// Notice: Use of undefined constant fruit - assumed 'fruit' in...

print $arr[fruit];    // apple

// سنعرف ثابتًا لإظهار ما يحدث.

define('fruit', 'veggie');

// لاحظ الفرق الآن

print $arr['fruit'];  // apple
print $arr[fruit];    // carrot

// السطر التالي صحيح لأنه داخل السلسلة النصية
//فلن يبحث المفسر عن الثوابت داخل السلسلة النصية، ولن يظهر خطأ من النوع 
// E_NOTICE

print "Hello $arr[fruit]";      // Hello apple

// مع استثناء واحد: تسمح الأقواس المعقوفة المحيطة بالمصفوفة داخل السلاسل النصية بتفسير الثوابت.

print "Hello {$arr[fruit]}";    // Hello carrot
print "Hello {$arr['fruit']}";  // Hello apple

// هذا لن يعمل وسيظهر خطأ:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'

print "Hello $arr['fruit']";
print "Hello $_GET['foo']";

// من الخيارات الأخرى: دمج السلاسل النصية

print "Hello " . $arr['fruit']; // Hello apple
?> 

عند تعيين قيمة error_reporting لإظهار الأخطاء من المستوى E_NOTICE (عن طريق ضبطه إلى E_ALL على سبيل المثال)، فستظهر الأخطاء السابقة على الفور. تذكّر أنَّ  error_reporting مضبوطٌ لكيلا يعرض التنبيهات من النوع NOTICE.

وكما ورد في قسم البنية العامة يجب وضع تعبير داخل الأقواس المربعة []، أي أن الشيفرة البرمجية التالية ستعمل:

<?php
echo $arr[somefunc($bar)];
?>

استخدمنا القيمة المُعادة من دالة كفهرس للمصفوفة في المثال السابق.

تستطيع لغة PHP تفسير الثوابت أيضًا عندما تكون ضمن أقواس:

<?php
$error_descriptions[E_ERROR]   = "A fatal error has occurred";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE]  = "This is just an informal notice";
?>

لاحظ أن E_ERROR هو معرف صحيح، مثل bar في المثال الأول، والمثال الأخير مشابه للمثال الآتي:

<?php
$error_descriptions[1] = "A fatal error has occurred";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>

ذلك لأنَّ E_ERROR تساوي 1، …

لماذا هذا سيء إذا؟

في المستقبل، قد يضيف فريق PHP ثابتًا آخر أو كلمةً محجوزةً جديدةً، وقد يكون هنالك ثابت في شيفرةٍ برمجيةٍ أخرى التي قد تتداخل مع الشيفرة الحالية، على سبيل المثال من الخطأ استخدام كلمات empty و default بهذه الطريقة لأنها كلمات محجوزة.

ملاحظة: نُذكِّر أنَّ بالإمكان التخلي عن علامتَي الاقتباس عند محاولة الوصول إلى عناصر مصفوفة ضمن سلسلة نصية محاطة بعلامتَي اقتباس مزدوجة. أي أنَّ التعبير ‎"$foo[bar]"‎ صحيحٌ.

انظر للأمثلة أعلاه للمزيد من المعلومات.

التحويل إلى مصفوفات

إن نتيجة تحويل كل من الأعداد الصحيحة والأعداد العشرية والسلاسل النصية و القيم المنطقية والموارد هي مصفوفة ذاتُ عنصرٍ وحيدٍ في الموقع الأول (أي الفهرس 0) مع القيمة الأولية التي تم تحويلها، أي بعبارة أخرى، إن ‎(array) $scalarValue هي نفسها array($scalarValue)‎.

إن نتيجة تحويل كائن إلى مصفوفة هي مصفوفة متكونة من خاصيات الكائن، إذ إنَّ المفاتيح هي أسماء المتغيرات الأعضاء التابعة للكائن، لكن هنالك بعض الاستثناءات البارزة: لا يمكن الوصول إلى الخاصيات العددية وستُسبَق أسماء المتغيرات الخاصة باسم الصنف، وأسماء المتغيرات المحمية ستكون مسبقةً بالرمز"*".

هذه القيم مرفقة ببايت فارغ (null byte) قبلها أو بعدها وقد يؤدي ذلك إلى سلوك غير متوقع في بعض الحالات:

<?php

class A {
    private $A; // '\0A\0A'
}

class B extends A {
    private $A; // '\0B\0A'
    public $AA; // 'AA'
}

var_dump((array) new B());
?> 

سيبدو لك أنه سيكون هنالك مفتاحان باسم "AA"، لكن في الحقيقة ستجد أن واحدًا منهما يدعى "‎\0A\0A".

إذا جرّبنا تحويل NULL إلى مصفوفة فستكون النتيجة هي مصفوفة فارغة.

المقارنة

يمكنك مقارنة المصفوفات باستخدام الدالة array_diff()‎ إضافةً إلى معاملات المصفوفة.

أمثلة

إن المصفوفات في PHP متنوعةٌ للغاية، وهذه بعض الأمثلة.

<?php

// الشيفرة الآتية

$a = array( 'color' => 'red',
            'taste' => 'sweet',
            'shape' => 'round',
            'name'  => 'apple',
            4        // key will be 0
          );
$b = array('a', 'b', 'c');

// تماثل ما يلي

$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // المفتاح سيكون 0
$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// بعد تنفيذ الشيفرة البرمجية السابقة، ستصبح المصفوفة كما يلي

// $a:
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 
// 'name' => 'apple', 0 => 4),
// $b
// array(0 => 'a', 1 => 'b', 2 => 'c')
// أو ببساطة
// array('a', 'b', 'c').
?> 

المثال 9: مجموعة (Collection)

<?php
$colors = array('red', 'blue', 'green', 'yellow');
foreach ($colors as $color) {
    echo "Do you like $color?\n";
} 
?>

المثال 10: استخدام array()‎

<?php
// (property-)map
$map = array( 'version'    => 4,
              'OS'         => 'Linux',
              'lang'       => 'english',
              'short_tags' => true
            );

// مصفوفة ذات مفاتيح رقمية

$array = array( 7,
                8,
                0,
                156,
                -10
              );

// ما سبق يكافئ

// array(0 => 7, 1 => 8, ...)
$switching = array(         10, // المفتاح = 0
                    5    =>  6,
                    3    =>  7, 
                    'a'  =>  4,
                            11, // المفتاح = 6، فقد كان أكبر مفتاح على شكل صحيح يساوي 5
                    '8'  =>  2, // المفتاح = 8، أي عدد صحيح
                    '02' => 77, // المفتاح = '02' أي سلسلة نصية
                    0    => 12  // ستكون القيمة المرتبطة بالفهرس 0 هي 12 بدلًا من 10
                  );

// مصفوفة فارغة

$empty = array();         
?> 

المثال 11: المرور على العناصر باستخدام foreach

<?php
$colors = array('red', 'blue', 'green', 'yellow');
foreach ($colors as $color) {
    echo "Do you like $color?\n";
}
?>

مخرجات المثال السابق هي:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?

يمكنك تغيير قيمة مصفوفة مباشرة عن طريق التمرير بالمرجعية.

المثال 12: تغيير عنصر في الحلقة

<?php
foreach ($colors as &$color) {
    $color = strtoupper($color);
}
unset($color);
print_r($colors);
?> 

مخرجات المثال السابق هي:

Array
(
    [0] => RED
    [1] => BLUE
    [2] => GREEN
    [3] => YELLOW
)

هذا المثال سينشئ مصفوفة تبدأ من 1.

المثال 13: مصفوفة تبدأ بالموقع الأول

<?php
$firstquarter  = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
?>

مخرجات المثال السابق:

Array 
(
    [1] => 'January'
    [2] => 'February'
    [3] => 'March'
)

المثال 14: ملء المصفوفة

<?php

// ملء المصفوفة بالعناصر من المجلد

$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
    $files[] = $file;
}
closedir($handle); 
?> 

المصفوفات مرتبة، ويمكن تغيير الترتيب باستخدام دوال الفرز والترتيب المختلفة يمكنك مراجعة قسم دوال المصفوفة للمزيد من المعلومات، يمكن أن تُستخدم الدالة count()‎ عدد العناصر في المصفوفة.

المثال 15: فرز مصفوفة

<?php
sort($files);
print_r($files);
?> 

يمكن أن تتكون المصفوفة من أي شيء، بما في ذلك المصفوفات الأخرى، وهذا يتيح إنشاء مصفوفات متعددة الأبعاد ومتكررة.

المثال 16: مصفوفات متعددة الأبعاد ومتكررة

<?php
$fruits = array ( "fruits"  => array ( "a" => "orange",
                                       "b" => "banana",
                                       "c" => "apple"
                                     ),
                  "numbers" => array ( 1,
                                       2,
                                       3,
                                       4,
                                       5,
                                       6
                                     ),
                  "holes"   => array (      "first",
                                       5 => "second",
                                            "third"
                                     )
                );

// بعض الأمثلة لعناوين القيم في المصفوفة أعلاه 

echo $fruits["holes"][5];    // تطبع "second"
echo $fruits["fruits"]["a"]; // تطبع "orange"
unset($fruits["holes"][0]);  // تحذف "first"

// إنشاء مصفوفة جديدة متعددة الأبعاد

$juices["apple"]["green"] = "good"; 
?> 

عمليات نسخ المصفوفات تتضمن نسخ القيم، يمكن استخدام معامل المرجع (reference operator) لنسخ المصفوفة بالمرجعية.

<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 تغيّرت
             // $arr1 هي array(2, 3)

$arr3 = &$arr1;
$arr3[] = 4; // $arr1 = $arr3 
?> 

مصادر