آرایه ها در php

آرایه ها در PHP

در هر زبان برنامه نویسی، آرایه متغیری است که چندین مقدار را در خود ذخیره می کند. بنابراین آرایه ها در PHP نیز از این قاعده مستثنا نیست.

اگر مقداری بیش از یک عدد دارید می توانید آن را در یک متغر آرایه ای ذخیره کنید. برای مثال مقادیر زیر را در نظر بگیرید:

$car1 = "Ferrari";
$car2 = "Benz";
$car3 = "BMW";
$car4 = "Volvo";

همانطور که مشاهده می کنید این چهار متغیر تعداد خطوط کد نویسی را بالا و خوانایی کد را پایین می آورند. همچنین اگر بخواهید نام خودرویی را جستجو کنید به مشکل برخواهید خورد. برای جلوگیری از این منظور از آرایه استفاده می کنیم.

پیشرفته: یک آرایه PHP در واقع یک map مرتب شده است. map متغیری است که مقادیر را به کلیدها مرتبط می کند. این نوع متغیر برای چندین کاربرد دارد. می توان آن را به عنوان یک آرایه، لیست، جدول hash، یا dictionary، مجموعه، پشته، صف و موارد دیگر در نظر گرفت. از آنجایی که مقادیر آرایه می توانند آرایه های دیگری باشند، درختان و آرایه های چند بعدی نیز امکان پذیر است.

آرایه ها در PHP می توانند هم به عنوان list و هم بعنوان map عمل کنند.

تعریف آرایه در PHP

در PHP از دو روش مختلف برای تعریف آرایه استفاده می شود. یکی array() برای تعریف آرایه های کلید-مقدار و آرایه های معمولی و [] برای ایجاد آرایه ای که تمامی مقادیر داخل براکت ها قرار می گیرند.

مقادیر آرایه می توانند از هر نوع داده ای باشند.

$cars = array("Ferrari","Benz","BMW","Volvo",100,true);

// یا
$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo",
    "han" => 100,
    "bool" => true
);

// یا
$cars = ["Ferrari","Benz","BMW","Volvo",100,true];

تعداد مقادیر آرایه نامحدود می باشد. نکته ای که در تعریف آرایه های کلید-مقدار باید در نظر بگیرید این است که کلیدهای آرایه منحصر به فرد باید باشد. اگر دو کلید همنام در آرایه داشته باشید PHP آخرین کلید را معتبر خواهد دانست. در ادامه به این مسئله بیشتر خواهیم پرداخت.

اگر از مقادیر آرایه مطمئن نیستید و بعدا آرایه را مقدار دهی خواهید کرد، می توان از کد زیر استفاده نمود.

$cars = array();
$cars[] = "Ferrari";
$cars[] = "Benz";
$cars[3] = "BMW";
$cars['volvo'] = "Volvo";

var_dump($cars);
------------------
array (size=4)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۳ => string 'BMW' (length=3)
  'volvo' => string 'Volvo' (length=5)

نکته: بعد از آخرین مقدار اگر کاما قرار دهید مشکلی بوجود نخواهد آورد مانند زیر

$cars = array("Ferrari","Benz","BMW","Volvo",);

این روش در واقع برای تعریف آرایه ها در چند سطر بوجود آمده است.

$cars = array(
    "ferrari" => "Ferrari",
    "benz" => "Benz",
    "bmw" => "BMW",
    "volvo" => "Volvo",
);

اگر آرایه از قبل وجود داشته باشد و بخواهید مقدار قبلی آن را تغییر دهید می توانید از کد زیر استفاده نمایید.

$cars[1] = "Toyota";

echo $cars[1];
-----------------
Toyota

برای ایجاد آرایه های کلید-مقدار می توانید از تابع array_combine() نیز استفاده نمایید.

$keys = array("fer","ben","bmw","vol");
$cars = array("Ferrari","Benz","BMW","Volvo");

$arr = array_combine($keys,$cars);

var_dump($arr);
-----------------
array (size=4)
  'fer' => string 'Ferrari' (length=7)
  'ben' => string 'Benz' (length=4)
  'bmw' => string 'BMW' (length=3)
  'vol' => string 'Volvo' (length=5)

دریافت مقدار خانه آرایه

برای دریافت مقادیر خانه های آرایه از اعداد استفاده می کنیم که بعد در همین مطلب به بقیه روشها هم اشاره خواهیم کرد.

echo $cars[1];    ===>  Benz
echo "Cars: " . $cars[0] . "," . $cars[1] . "," . $cars[2] . "," . $cars[3];
-----------------
Cars: Ferrari,Benz,BMW,Volvo

همانطور که مشاهده می کنید خروجی مقدار “Benz” بود.

در PHP نیز آرایه ها از اندیس صفر شروع می شوند. یعنی اولین خانه آرایه صفر می باشد نه یک.

نکته: در PHP 8 میتوانیم بجای [] از {} استفاده نماییم.

echo $cars{1};
----------------
Benz

روشهای دیگر دریافت مقدار

function getArray() {
    return array("Ferrari","Benz","BMW","Volvo");
}
$secondElement = getArray()[1];
// یا
list(, $secondElement) = getArray();

echo $secondElement;
---------------------
Benz

با استفاده از تابع array_values()

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

var_dump(array_values($cars));
----------------------
array (size=4)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)

با استفاده از تابع array_pop() نیز می توان آخرین مقدار آرایه را استخراج کرد اما با این تفاوت که این تابع آخرین مقدار را از آرایه حذف می کند.

$cars = array("Ferrari", "Benz", "BMW", "Volvo");

var_dump(array_pop($cars));

var_dump($cars);
-----------------------------
Volvo

array (size=3)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)

تابع دیگری که می توانید اولین مقدار خانه را استخراج کنید تابع array_shift() می باشد. این تابع مقدار اولین خانه را بازمی گرداند و خانه را از آرایه حذف می کند.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

$value = array_shift($cars);

var_dump($value);
var_dump($cars);
-----------------
Ferrari

array (size=3)
  'ben' => string 'Benz' (length=4)
  'bmw' => string 'BMW' (length=3)
  'vol' => string 'Volvo' (length=5)

انواع آرایه ها در PHP

در PHP سه نوع آرایه داریم:

  1. آرایه Indexed: این نوع آرایه از اعداد برای دسترسی به خانه های آرایه استفاده می کند.
  2. آرایه Associative: این نوع از اسامی برای دسترسی به خانه ها استفاده می کند مانند key-value
  3. آرایه Multidimensional: این نوع آرایه ها هم به آرایه چند بعدی مشهور هستند. یعنی در هر خانه آرایه، آرایه ای دیگر ذخیره می شود.

۱- آرایه Indexed

این آرایه در بالا تعریف شده است. برای این آرایه فقط کافیست که مقادیر را درون آرایه قرار دهید.

برای دریافت مقدار از آرایه کافیست که شماره اندیس آن را قرار دهید.

$cars = ["Ferrari","Benz","BMW","Volvo"];
echo $cars[1];
----------------
Benz

۲- آرایه Associative

این نوع آرایه بجای شماره اندیس از کلید استفاده می کند. کلید می تواند یک عدد یا یک رشته باشد و مقدار می تواند از هر نوع باشد.

نام کلید ها از قوانین زیر پیروی می کنند:

  • رشته‌های حاوی عدد اعشاری می تواند به عنوان کلید معرفی شود.اگر قبل از عدد با علامت + قرار داشته باشد، که به عدد تبدیل می شود. به عنوان مثال. کلید “۸” مجاز است. درحالیکه “۰۸” مجاز نمی باشد، زیرا یک عدد صحیح اعشاری مجاز نیست.
  • اعداد اعشاری به عدد صحیح تبدیل می شود. به این صورت که قسمت اعشاری آنها حذف می شود.
  • کلیدهای بولین به اعداد ۱ و ۰ تبدیل می شوند.
  • مقدار null به رشته خالی (“”) تبدیل خواهد شد.
  • آرایه ها و object ها نمی توانند به عنوان کلید استفاده شوند. در غیر این صورت خطای هشدار نمایش داده خواهد شد.
$cars = array(
    ۱۱    => "Ferrari",
    "۱۲"  => "Benz",
    ۱۳.۵  => "BMW",
    true =>  "Volvo",
);
var_dump($cars);
------------------
array (size=4)
  ۱۱ => string 'Ferrari' (length=7)
  ۱۲ => string 'Benz' (length=4)
  ۱۳ => string 'BMW' (length=3)
  ۱ => string 'Volvo' (length=5)

برای دریافت یک مقدار از آرایه حتما باید از ” استفاده نماییم حتی اگر کلید ما بصورت عددی باشد.

echo $cars['11'];
--------------------
Ferrari

نکته: اگر از یک کلید چندین بار استفاده شود، کلید آخر معتبر می باشد.

$cars = array(
    ۱    => "Ferrari",
    "۱"  => "Benz",
    ۱.۵  => "BMW",
    true =>  "Volvo",
);
var_dump($cars);

خروجی

array (size=1)
  ۱ => string 'Volvo' (length=5)

چون همه کلیدها تبدیل به عدد ۱ شده است بنابراین فقط کلید آخر معتبر می باشد.

۳- آرایه Multidimensional

در آرایه چند بعدی می توانیم آرایه را در آرایه قرار دهیم.

$cars = array(array("Ferrari","Benz","BMW","Volvo"),array("Toyota","Audi"));

var_dump($cars);
-----------------------
array (size=2)
  ۰ => 
    array (size=4)
      ۰ => string 'Ferrari' (length=7)
      ۱ => string 'Benz' (length=4)
      ۲ => string 'BMW' (length=3)
      ۳ => string 'Volvo' (length=5)
  ۱ => 
    array (size=2)
      ۰ => string 'Toyota' (length=6)
      ۱ => string 'Audi' (length=4)

برای گرفتن مقدار خانه ای از آرایه از روش زیر استفاده می کنیم.

echo $cars[1][1];
---------------------
Audi

برای تغییر مقدار نیز مانند آرایه یک بعدی استفاده می کنیم اما با کمی تغییر.

$cars[1][1] = "ّFord";

echo $cars[1][1];
-------------------
Ford

طول آرایه

برای دریافت تعداد آیتمهای آرایه در PHP از تابع count() استفاده می کنیم.

$cars = array("Ferrari","Benz","BMW","Volvo");
echo count($cars);

خروجی مقدار ۴ می باشد. چون تعداد نام های خودروها ۴ تا می باشد.

افزودن مقدار به آرایه

برای افزودن مقدار جدید به آرایه روشهای مختلفی وجود دارد که در زیر به آنها می پردازیم.

$cars = array("Ferrari","Benz","BMW","Volvo");
$cars[] = "Toyota";

var_dump($cars);
--------------------
array (size=5)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)
  ۴ => string 'Toyota' (length=6)

یک خانه با اندیس ۴ به آخر آرایه اضافه می کند و مقدار آن را “Toyota” قرار می دهد.

$cars = array("Ferrari","Benz","BMW","Volvo");
$cars['a'] = "Toyota";

var_dump($cars);
-------------------
array (size=5)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)
  'a' => string 'Toyota' (length=6)

در PHP 7.4.0 به بعد می توان با … به اول و آخر آرایه مقداری را اضافه کرد. رجوع شود به باز کردن آرایه ها

از تابع array_push() نیز می توان برای افزودن مقدار به آخر آرایه استفاده کرد.

$cars = array("Ferrari","Benz","BMW","Volvo");

array_push($cars,"Toyota","Audi");

var_dump($cars);
-------------------
array (size=6)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)
  ۴ => string 'Toyota' (length=6)
  ۵ => string 'Audi' (length=4)

این روش فقط برای آرایه های Indexed کاربرد دارد و نمی توان برای مقادیر، کلید تعریف کرد.

با استفاده از تابع array_unshift() می توان مقداری به اول آرایه اضافه کرد.

$cars = array("Ferrari", "Benz", "BMW", "Volvo");

array_unshift($cars, "Toyota");

var_dump($cars);
--------------------
array (size=5)
  ۰ => string 'Toyota' (length=6)
  ۱ => string 'Ferrari' (length=7)
  ۲ => string 'Benz' (length=4)
  ۳ => string 'BMW' (length=3)
  ۴ => string 'Volvo' (length=5)

حذف مقدار از آرایه

برای حذف خانه ای از آرایه نیز روشهای مختلفی وجود دارد.

روش اول استفاده از تابع unset() می باشد.

$cars = array("Ferrari","Benz","BMW","Volvo");
unset($cars[2]);

var_dump($cars);
-----------------
array (size=3)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۳ => string 'Volvo' (length=5)

مقدار “BMW” از آرایه حذف شد.

نکته: این تابع مقدار را از آرایه حذف می کند ولی اندیس آن را اصلاح نمی کند. در مثال قبل اندیس ۲ وجود ندارد. برای اصلاح اندیس می توانیم از تابع array_values() استفاده نماییم.

$cars = array_values($cars);
var_dump($cars);
------------------
array (size=3)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'Volvo' (length=5)

تکثیر آرایه

تکثیر آرایه ها در PHP خیلی ساده است؛ کافیست آرایه را برابر آرایه قرار دهید.

$cars1 = array("Ferrari","Benz","BMW","Volvo");

$cars2 = $cars1;

var_dump($cars2);
--------------------
array (size=4)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)

نکته: این روش مشکل کوچکی دارد که باید به آن توجه کنید. آرایه ها در حافظه ذخیره می شوند و در این روش آرایه در دو جای حافظه ذخیره می شود که اگر آرایه ای بزرگ باشد مقداری که از حافظه خواهد گرفت، چشمگیر می باشد. اگر نیاز به آرایه اول نداشته باشید می توانید از طریق ارجاع اقدام به تکثیر کنید تا حافظه فقط یکبار اشغال شود.

$cars2 = &$cars1;

به یاد داشته باشید که اگر مقادیر آرایه اول را تغیر دهید آرایه دوم نیز تغییر خواهد کرد.

الحاق آرایه ها

از تابع array_merge() برای یکی کردن و یا همان merge کردن آرایه ها در PHP استفاده می شود.

$cars1 = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);
$cars2 = array(
    "toy" => "Toyota",
    "aud" => "Audi"
);

$cars = array_merge($cars1, $cars2);

var_dump($cars);
--------------------
array (size=6)
  'fer' => string 'Ferrari' (length=7)
  'ben' => string 'Benz' (length=4)
  'bmw' => string 'BMW' (length=3)
  'vol' => string 'Volvo' (length=5)
  'toy' => string 'Toyota' (length=6)
  'aud' => string 'Audi' (length=4)

همچنین برای الحاق آرایه ها می توان از تابع array_push() نیز استفاده کرد.

$cars1 = array("Ferrari", "Benz", "BMW", "Volvo");
$cars2 = array("Toyota", "Audi");

array_push($cars1, $cars2);

var_dump($cars1);
--------------------
array (size=5)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)
  ۴ => 
    array (size=2)
      ۰ => string 'Toyota' (length=6)
      ۱ => string 'Audi' (length=4)

با این تفاوت که این تابع آرایه را به آرایه چند بعدی تبدیل می کند.

استفاده از آرایه در حلقه ها

چون آرایه می تواند چندین مقدار را در خود ذخیره کند، بنابراین می توان به راحتی از آن در حلقه های تکرار مانند foreach استفاده کرد.

$cars = array("Ferrari","Benz","BMW","Volvo");

foreach($cars as $car){
    echo $car."-";
}
-----------------
Ferrari-Benz-BMW-Volvo-

در حلقه ها می توان کلید نیز استفاده کرد.

foreach ($cars as $key => $car) {
    echo $key . ":" . $car . "-";
}
------------------
fer:Ferrari-ben:Benz-bmw:BMW-vol:Volvo-

می توان با ارجاع دادن مقادیر آرایه در حلقه های تکرار، مقادیر آنها را تغییر داد.

$cars = array("Ferrari","Benz","BMW","Volvo");

foreach($cars as &$car){
    $car = $car . "1";
}

var_dump($cars);
--------------------
array (size=4)
  ۰ => string 'Ferrari1' (length=8)
  ۱ => string 'Benz1' (length=5)
  ۲ => string 'BMW1' (length=4)
  ۳ => string 'Volvo1' (length=6)

نکته: به & قبل از نام متغیر $cars در حلقه دقت شود.

مرتب سازی آرایه ها در PHP

به راحتی می توان توسط تابع sort() آرایه ها را مرتب کرد. اگر مرتبسازی موفقیت آمیز باشد true در غیر اینصورت false برمی گرداند. به صورت پیش فرض این تابع آرایه را صعودی مرتب می کند.

$cars = array("Ferrari","Benz","BMW","Volvo");

sort($cars);

var_dump($cars);
--------------------
array (size=4)
  ۰ => string 'BMW' (length=3)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'Ferrari' (length=7)
  ۳ => string 'Volvo' (length=5)

به همراه تابع sort() توابع دیگری هستند که مرتب سازی را مانند تابع انجام می دهند اما با کمی کنترل بیشتر. با اینکه تابع sort() تابع اصلی است اما اگر به همراه برخی حروف خاص باشد، رفتار متفاوتی خواهد داشت که در زیر به آنها می پردازیم.

  • a: مرتب سازی به همراه حفظ کلید
  • k: مرتب سازی براساس کلید
  • r: مرتب سازی نزولی
  • u: مرتب سازی براساس تابع

حال به معرفی توابع می پردازیم

  • asort
  • arsort
  • uasort
  • ksort
  • krsort
  • arsort
  • krsort
  • rsort
  • uasort
  • usort
function hs_custom_sort($value1, $value2)
{
    return strcmp($value1, $value2);
}
$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

usort($cars, 'hs_custom_sort');

var_dump($cars);
-----------------
array (size=4)
  ۰ => string 'BMW' (length=3)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'Ferrari' (length=7)
  ۳ => string 'Volvo' (length=5)

اگر داده های شما شامل کاراکترهایی غیر از انگلیسی می باشد، برای مرتب سازی آنها PHP راهکاری دارد. برای این کار از local استفاده می شود.

setlocale(LC_ALL, 'sk_SK.utf8');

$words = ["ďateľ", "auto", "železo", "byt", "kocka", "dáma", "zem", "autor", "ceduľa", "čižma"];

sort($words, SORT_LOCALE_STRING);

var_dump($words);
--------------------
array (size=10)
  ۰ => string 'auto' (length=4)
  ۱ => string 'autor' (length=5)
  ۲ => string 'byt' (length=3)
  ۳ => string 'ceduľa' (length=7)
  ۴ => string 'dáma' (length=5)
  ۵ => string 'kocka' (length=5)
  ۶ => string 'zem' (length=3)
  ۷ => string 'čižma' (length=7)
  ۸ => string 'ďateľ' (length=7)
  ۹ => string 'železo' (length=7)

اول از همه زبان محلی (local) مورد نظر را ست می کنیم و سپس اقدام به مرتب سازی می نماییم. در این مثال زبان اسلواکی برای PHP تعریف شده است.

جستجو در آرایه ها در PHP

برای یافتن مکان مقداری در داخل آرایه از تابع array_search() و in_array() استفاده می کنیم.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

if(in_array("Ferrari",$cars)){
    echo "Exists in " . in_array("Ferrari",$cars);
}
else{
    echo "Not Exists";
}
------------------
Exists in 0

اندیس مقدار را برگشت می دهد. در صورت نبود مقدار در آرایه، مقدار false را برگشت می دهد.

echo array_search("Ferrari",$cars);
------------------
fer

کلید مقدار را برگشت می دهد. در صورت نبود مقدار در آرایه، مقدار false را برگشت می دهد.

توابع به حروف بزرگ و کوچک حساس می باشند.

اگر فقط می خواهید کنترل کنید ببینید که آیا مقدار در آرایه وجو دارد یا نه و نیازی به مقدار آن ندارید می توانید از تابع array_key_exists() استفاده نمایید.

if(array_key_exists("Benz",$cars)){
    echo "Exists";
}

باز کردن آرایه

در PHP 7.4.0 با استفاده از … می توانیم آرایه ها را باز کنیم مانند … در ReactJS. با این روش می توان به اول یا آخر آرایه ها مقداری اضافه کرد و یا آرایه ها را با هم ادغام نمود.

$cars = array("Ferrari","Benz");
$arr1 = [...$cars]; //["Ferrari","Benz"]
$arr2 = ["Toyota",...$cars]; //["Toyota","Ferrari","Benz"]

$cars2 = array("Toyota","Audi");
$arr = [...$cars,...$cars2,"Ford"];  //["Ferrari","Benz","Toyota","Audi","Ford"]

در ادغام دو آرایه با هم (مثال آخر) اگر نام کلیدها در دو آرایه یکی باشد، کلید آرایه دوم معتبر خواهد بود.

تبدیل آرایه به رشته

روشهای مختلفی برای تبدیل آرایه به رشته در PHP وجود دارد. از جمله این روشها استفاده از تابع implode() می باشد.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

echo implode(", ", $cars);
--------------------
Ferrari, Benz, BMW, Volvo

برای آرایه های چند بعدی نیز می توان از تابع array_map() استفاده کرد.

$cars = array(
    array(
        'BMW' => 'Germany'
    ),
    array(
        'Ferrari' => 'Italy'
    ),
    array(
        'Honda' => 'Japan'
    )
);

echo implode(", ", array_map(function ($entry) {
    return ($entry[key($entry)]);
}, $cars));
----------------
Germany, Italy, Japan

تبدیل آرایه به JSON و بلعکس

برای تبدیل آرایه به JSON از تابع json_encode() و برای تبدیل JSON به object از تابع json_decode() استفاده می شود.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

echo json_encode($cars);
--------------------
{"fer":"Ferrari","ben":"Benz","bmw":"BMW","vol":"Volvo"}
var_dump(json_decode('{"fer":"Ferrari","ben":"Benz","bmw":"BMW","vol":"Volvo"}'));
----------------
object(stdClass)[1]
  public 'fer' => string 'Ferrari' (length=7)
  public 'ben' => string 'Benz' (length=4)
  public 'bmw' => string 'BMW' (length=3)
  public 'vol' => string 'Volvo' (length=5)

در روش تبدیل JSON، آرایه ایجاد نمی شود بلکه یک object ایجاد می شود.

تابع is_array

این تابع برای بررسی آرایه بودن و یا نبودن متغیر به کار می رود.

$cars = array(
    "Ferrari",
    "Benz",
    "BMW",
    "Volvo"
);

echo is_array($cars);
-------------
۱

در صورت آرایه بودن متغیر عدد ۱ را بازمی گرداند.

تابع array_keys

برای دریافت کلیدهای آرایه از تابع array_keys() استفاده می شود.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

var_dump(array_keys($cars));
-------------------------
array (size=4)
  ۰ => string 'fer' (length=3)
  ۱ => string 'ben' (length=3)
  ۲ => string 'bmw' (length=3)
  ۳ => string 'vol' (length=3)

تابع array_flips

برای جابجایی کلیدها با مقدارشان نیز از تابع array_flips() استفاده می شود.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

var_dump(array_flip($cars));
---------------------
array (size=4)
  'Ferrari' => string 'fer' (length=3)
  'Benz' => string 'ben' (length=3)
  'BMW' => string 'bmw' (length=3)
  'Volvo' => string 'vol' (length=3)

تابع list

برای تخصیص متغیرها به روشی کوتاه طراحی شده است.

$cars = array("Ferrari","Benz","BMW","Volvo");

list($a, $b, $c, $d) = $cars;

var_dump($a);
----------------
Ferrari

این تابع با توابع preg_slit() و explode() سازگاری کامل دارد.

$cars = "Ferrari,Benz,BMW,Volvo";

list($a,,, $d) = explode(",",$cars);

var_dump($d);
----------------
Volvo

تابع extract

با تابع extract() می توانید یک آرایه کلید-مقدار را به متغیرها مربوط کنید. برای هر آیتم یک آرایه، یک متغیر با نام کلید ایجاد می شود که مقدارش نیز همان مقدار قرار داده می شود.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

extract($cars);

var_dump($ben);
-----------------
Benz

تابع متغیرهایی با عنوانهای fer، ben، bmw و vol ایجاد می کند.

توجه: اگر با دادههایی کار میکنید که از پایگاه داده دریافت کرده اید، بهتر از است از این تابع استفاده ننمایید و یا در صورت استفاده از فلگ های EXTR_IF_EXISTS و EXTR_PREFIX_ALL استفاده نمایید.

تابع compact

این تابع درست برعکس تابع extract() می باشد. از متغیرها آرایه ایجاد می کند.

$fer = "Ferrari";
$ben = "Benz";
$bmw = "BMW";
$vol = "Volvo";

$cars = compact('fer','ben','bmw','vol');

var_dump($cars);
-------------------
array (size=4)
  'fer' => string 'Ferrari' (length=7)
  'ben' => string 'Benz' (length=4)
  'bmw' => string 'BMW' (length=3)
  'vol' => string 'Volvo' (length=5)

مقادیر داخل تابع همان نام متغیر های بالا هستند که باید عینا وارد شوند در غیر این صورت خطا خواهند داد.

تابع array_filter

برای فیلتر کردن آرایه ها در PHP از این تابع استفاده می شود. مقدار اول همان آرایه ای است که می خواهیم فیلتر کنیم و مقدار دوم تابع خود یک تابع است که عمل فیلتر را انجام خواهد داد.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo",
    "fer2" => "Ferrari"
);

$arr = array_filter($cars,function($car){
    return $car == "Ferrari";
});

var_dump($arr);
------------------
array (size=2)
  'fer' => string 'Ferrari' (length=7)
  'fer2' => string 'Ferrari' (length=7)

مقادیری که عبارت Ferrari را دارند به صورت آرایه بازگشت می دهد. مقدار تابع برگشتی یا true است یا false.

این تابع فقط براساس مقدار فیلتر انجام نمی دهد، بلکه با استفاده از ارسال پارامتر سوم می توانید براساس کلید و یا هم کلید و هم مقدار، فیلترینگ را انجام دهید برای اینکار نیاز هست که فلگ های ARRAY_FILTER_USE_KEY و یا ARRAY_FILTER_USE_BOTH را قرار دهید.

از تابع array_filter() برای حذف مقادیر خالی نیز می توانید استفاده کنید.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "",
    "vol" => "Volvo"
);

$arr = array_filter($cars);

var_dump($arr);
-----------------
array (size=3)
  'fer' => string 'Ferrari' (length=7)
  'ben' => string 'Benz' (length=4)
  'vol' => string 'Volvo' (length=5)

تابع array_unique

با این تابع فقط مقادیر منحصر به فرد را می توان از آرایه استخراج کرد.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo",
    "fer2" => "Ferrari"
);

$arr = array_unique($cars);

var_dump($arr);
---------------
array (size=4)
  'fer' => string 'Ferrari' (length=7)
  'ben' => string 'Benz' (length=4)
  'bmw' => string 'BMW' (length=3)
  'vol' => string 'Volvo' (length=5)

مقدار Ferrari در آخر آرایه حذف شده است چون این مقدار قبلا در آرایه موجود بوده است.

تابع array_column

از این تابع برای استخراج ستونهای آرایه های چندبعدی استفاده می شود. این آرایه ها ممکن است از طریق دستورات پایگاه داده پر شده باشند و یا ممکن است از طریق فایل مانند CSV باشند.

$cars = array(
    array(
        "name" => "Ferrari",
        "year" => 2022
    ),
    array(
        "name" => "Benz",
        "year" => 2020
    )
);

$arr = array_column($cars, "name");

var_dump($arr);
----------------
array (size=2)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)

تابع array_map

در فیلتر کردن آرایه توسط این تابع، می توانید بر روی تک تک مقادیر فیلتر مورد نظر را اعمال کنید.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

$arr = array_map('strtolower',$cars);

var_dump($arr);

// و یا
$arr = array_map(function($car){
    return strtolower($car);
},$cars);

var_dump($arr);
--------------------
array (size=4)
  'fer' => string 'ferrari' (length=7)
  'ben' => string 'benz' (length=4)
  'bmw' => string 'bmw' (length=3)
  'vol' => string 'volvo' (length=5)

در مثال اول تابع باید از قبل تعریف شده باشد.

function st2low($str){
    return strtolower($str);
}

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

$arr = array_map('st2low',$cars);

var_dump($arr);
-----------------
array (size=4)
  'fer' => string 'ferrari' (length=7)
  'ben' => string 'benz' (length=4)
  'bmw' => string 'bmw' (length=3)
  'vol' => string 'volvo' (length=5)

تابع array_walk

در تابع array_map() نواقصاتی وجود دارد. از جمله، نمی توان براحتی کلید را به تابع ارسال کرد. بخاطر همین از این تابع استفاده می کنیم. این تابع مانند تابع array_map() است اما با کمی تفاوت. در این تابع آرایه از طریق ارجاع به تابع ارسال می شود.

$cars = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);

array_walk($cars,function(&$car,$key){
    $car = "$key is a key of $car";
});

var_dump($cars);
-------------------
array (size=4)
  'fer' => string 'fer is a key of Ferrari' (length=23)
  'ben' => string 'ben is a key of Benz' (length=20)
  'bmw' => string 'bmw is a key of BMW' (length=19)
  'vol' => string 'vol is a key of Volvo' (length=21)

تابع array_diff

برای حذف آرایه از مقادیر از آرایه استفاده می شود.

$cars1 = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);
$cars2 = array(
    "bmw" => "BMW",
    "toy" => "Toyota"
);

$cars = array_diff($cars1, $cars2);

var_dump($cars);
-------------------
array (size=3)
  'fer' => string 'Ferrari' (length=7)
  'ben' => string 'Benz' (length=4)
  'vol' => string 'Volvo' (length=5)

چون BMW در هر دو آرایه بود بنابراین از آرایه اولی حذف شد.

تابع array_intersect

برخلاف تابع array_diff() از این تابع برای یافتن وجه اشتراک آرایه ها استفاده می شود.

$cars1 = array(
    "fer" => "Ferrari",
    "ben" => "Benz",
    "bmw" => "BMW",
    "vol" => "Volvo"
);
$cars2 = array(
    "bmw" => "BMW",
    "toy" => "Toyota"
);

$cars = array_intersect($cars1, $cars2);

var_dump($cars);
-------------------
array (size=1)
  'bmw' => string 'BMW' (length=3)

تابع array_slice

از این تابع برای استخراج بخشی از آرایه استفاده می شود.

$cars = array("Ferrari", "Benz", "BMW", "Volvo");

$cars = array_slice($cars, 1, 2);

var_dump($cars);
--------------------
array (size=2)
  ۰ => string 'Benz' (length=4)
  ۱ => string 'BMW' (length=3)

پارامتر اول همان آرایه ایست که می خواهیم استخراج از آن صورت گیرد، پارامتر دوم اندیس خانه ایست که می خواهیم استخراج از آنجا شروع شود و پارامتر سوم تعداد خانه هایی است که می خواهیم استخراج کنیم.

تابع array_reverse

از این تابع برای معکوس کردن خانه های آرایه در PHP استفاده می شود.

$cars = array("Ferrari", "Benz", "BMW", "Volvo");

$cars = array_reverse($cars);

var_dump($cars);
---------------------
array (size=4)
  ۰ => string 'Volvo' (length=5)
  ۱ => string 'BMW' (length=3)
  ۲ => string 'Benz' (length=4)
  ۳ => string 'Ferrari' (length=7)

تابع array_rand

این تابع از بین خانه های آرایه، کلید و اندیس یکی از آنها را به صورت تصادفی بازمی گرداند.

$cars = array(
    "Ferrari",
    "Benz",
    "BMW",
    "Volvo"
);

echo array_rand($cars);
-----------------
۲

ترکیب توابع آرایه ها در PHP

ترکیب توابع array_filter و array_map

با این ترکیب می توان آرایه را تمیز و مرتب کرد. می توان آیتمهای خالی و فاصله های اضافی را حذف کرد.

$cars = array("Ferrari", "Benz", "  BMW", "Volvo", "  ", "Toyota");

$cars = array_filter(array_map("trim", $cars));

var_dump($cars);
---------------------
array (size=5)
  ۰ => string 'Ferrari' (length=7)
  ۱ => string 'Benz' (length=4)
  ۲ => string 'BMW' (length=3)
  ۳ => string 'Volvo' (length=5)
  ۵ => string 'Toyota' (length=6)

مطالب مرتبط