آرایه ها در PHP

فروردین ۲۶, ۱۳۹۱

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

برای نگهداری مقادیر زیاد به صورت مرتب که از انعطاف خوبی هم برخوردار باشه از آرایه ها استفاده می کنیم.آرایه ها در پی اچ پی میتونن به صورت های : آرایه ، لیست (List) ، دیکشنری (Dictionary) ،استک (Stack)، صف (Queue) و … استفاده بشن.
هر مقدار در آرایه ها میتونن شامل آرایه دیگه هم باشه.

برای ایجاد آرایه در پی اچ پی از کلمه کلیدی array استفاده میشه.
مثال :

  $ar = array( 'k1'=>'v1','k2'=>'v2');

همینطور که در مثال میبینید هر آرایه شامل یک کلید یا key و مقدار یا value است که کلید آرایه فقط باید از نوع string یا integer باشه اما مقدار میتونه شامل هر نوع داده ای باشه.

 $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
echo $arr["somearray"][6]; // 5
 echo $arr["somearray"][13]; // 9
 echo $arr["somearray"]["a"]; // 42

 

اگر برای یک مقدار کلیدی در نظر گرفته نشده باشه به صورت خودکار خود پی اچ پی یک عدد به عنوان کلید به هر مقدار انتساب میده.

// This array is the same as ...
 array('a' , 'b' , 'c');
// ...this array
 array(0=>'a' , 1=>'b' , 2=>'c');

 

دو آرایه بالا دقیقن مثل هم عمل میکنن.

برای اضافه کردن مقادیر جدید به آرایه ها به صورت زیر عمل میکنیم :

 //$ar[key] = value
 $ar = array('a' , 'b' , 'c');
 $ar[] = 'd';
 $ar[] = 'e';
 $ar['name'] = 'Saeed';

در مثال بالا میبینید که برای اضافه کردن مقدار جدید از براکت ([]) استفاده میکنیم. اگر داخل براکت مقداری قرار بدیم به عنوان کلید در نظر گرفته میشه. اگر از براکت خالی استفاده بشه یک عدد به صورت خودکار به مقدار داده میشه .

تبدیل مقادیر مختلف به آرایه ها

برای تبدیل مقادیر مختلف به آرایه به صورت زیر عمل میکنیم :

  $arr = (array) 1.2323

که یک آرایه به صورت زیر به ما میده :

 

  array( [0] => 1.234444 )

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

 class My
 {
 public $a = 'a';
 public $b = 'b';
 }
 $obj = new My();
 $ar = (array)$obj;
 // Array ( [a] => a [b] => b )

 

دستیابی به مقادیر آرایه ها

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

 foreach ($arr as $a)
 echo $a;

در هر بار اجرای حلقه به ترتیب از اولین عضو آرایه در متغیر $a قرار میگیره .سپس میتونیم از این مقدار استفاده کنیم.
برای دسترسی همزمان به کلید و مقدار آرایه از حلقه foreach به صورت زیر استفاده میکنیم :

 foreach ($arr as $key => $value)
 echo $key .' '.$value;

در حلقه بالا در هر بار اجرای حلقه کلید آرایه در متغیر$key و مقدار در متغیر $value قرار میگیره.

برای نمایش تمام اعضای یک آرایه بدون استفاده از حلقه foreach میتونیم از دستور print_r استفاده کنیم :

 

  print_r($arr);

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

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

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

array_change_key_case(array,case)

این تابع تمام کلید های داخل آرایه رو به حروف بزرگ یا کوچک تبدیل میکنه.
پارامتر اول این تابع یک ارایه میگیره و پارامتر دوم CASE_LOWER برای تبدیل به حروف کوچک و CASE_UPPER برای تبدیل کلیدها به حروف کوچک استفاده میشن.
مثال :

 $input_array = array("FirSt" => 1, "SecOnd" => 4);
 print_r(array_change_key_case($input_array, CASE_UPPER));

 

خروجی

Array
(
[FIRST] => 1
[SECOND] => 4
)

مثال ۲ :

 

  $arr = array('first'=>'Apple','Second'=>'orange');
 print_r(array_change_key_case($arr, CASE_UPPER)););

خروجی

Array
(
[FIRST] => Apple
[SECOND] => orange
)

در مثال دوم مشاهده میکنید که فقط کلیدهای آرایه به حروف بزرگ تبدیل شدند.

array array_combine ( array , array )

این تابع دو آرایه رو به یک آرایه تبدیل مبکنه.به این صورت که آرایه ای که در پارامتر اول بهش میدیم به عنوان کلید و آرایه پارامتر دوم به عنوان مقادیر آرایه جدید در نظر گرفته میشن.
مثال :

$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);

خروجی :

Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)

میبینید که تمام مقادیر آرایه اول به عنوان کلید و تمام مقادیر آرایه دوم به عنوان مقدار آرایه جدید در نظر گرفته شدن. در صورتی که تعداد عناصر آرایه اول با آرایه دوم برابر نباشه FALSE برگشت داده میشه.

array array_count_values ( array )

تعداد تکرار کلیدهای یک آرایه رو به صورت یک آرایه انجمنی برمیگردونه.
مثال :

$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));

خروجی

Array
(
[۱] => ۲
[hello] => 2
[world] => 1
)

در آرایه $array عدد ۱ دوبار تکرار شده ، hello هم دوبار تکرار شده و world یک بار تکرار شده.خروجی این تابع هم به همین صورت تعداد مقادیر تکرار شده در آرایه رو برمیگردونه.

array_diff(array1,array2,array3,…)

با استفاده از این تابع میتونید یک ارایه رو با چند آرایه دیگه مقایسه کنید.در این تابع مقادیر(values) آرایه اول با مقادیر آرایه های بعدی مقابسه میشه و value هایی که در آرایه اول باشه اما در آرایه های بعدی نباشه برگشت داده میشه.

$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(3=>"Horse",4=>"Dog",5=>"Fish");
print_r(array_diff($a1,$a2));

خروجی

Array ( [0] => Cat )

array_diff_assoc($array1,$array2,$array3,…)

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

$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(0=>"Rat",1=>"Horse",2=>"Dog");
$a3=array(0=>"Horse",1=>"Dog",2=>"Cat");
print_r(array_diff_assoc($a1,$a2,$a3));

Array ( [0] => Cat [2] => Horse )

array_diff_key(array1 , array2,…)

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

$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(2=>"Bird",3=>"Rat",4=>"Fish");
$a3=array(5=>"Horse",6=>"Dog",7=>"Bird");
print_r(array_diff_key($a1,$a2,$a3));

Array ( [0] => Cat [1] => Dog )

array_fill(start , number , value)

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

$a=array_fill(2,3,"Dog");
print_r($a);

خروجی

Array ( [2] => Dog [3] => Dog [4] => Dog )

کلید ارایه از ۲ شروع شده و ۳ عنصر به آرایه اضافه شده با مقدار “Dog”

array_flip()

این تابع جای کلیدها و مقادیر رو عوض میکنه.

$a=array(0=>"Dog",1=>"Cat",2=>"Horse");

print_r(array_flip($a));

Array ( [Dog] => 0

[Cat] => 1 [Horse] => 2 )

array_key_exists(key , array)

این تابع چک میکنه که آیا یک کلید خاص در آرایه وجود داره یا نه .پارامتر اول کلید رو میگیره و پارامتر دوم آرایه

$a=array("a"=>"Dog","b"=>"Cat");
 if (array_key_exists("a",$a))
 {
 echo "Key exists!";
 }
 else
 {
 echo "Key does not exist!";
 }

//Key exists!

array_keys(array)

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

$ar = array('a'=>'Dog','b'=>'cat','c'=>'horse');
 print_r(array_keys($ar));

array_map(function , array1 , array2 , …)

این تابع هر مقدار از آرایه رو به یک تابع ارسال میکنه و نتیجه تابع رو به صورت یک آرایه بر میگردونه.
مثال :

function sqr($v)
 {
 return $v * $v;
 }
 $ar = array(2 , 3 , 4 , 5 , 6 );
 print_r(array_map('foo' , $ar));

خروجی :

Array ( [0] => 4 [1] => 9 [2] => 16 [3] => 25 [4] => 36 )

در صورتی که نیاز به فراخوانی متد یک کلاس در تابع array_map باشیم پارامتر اول رو به صورت یک آرایه تعریف میکنیم که مقدار اول آرایه نام کلاس ومقدار دوم نام تابع مورد نظر است :

class foo{
function bar($a){ return $a * $a );
}
array_map(array('foo','bar') , $arr));

array_merg(array1 , array2 , …)

ادغام دو یا چند آرایه باهم.

$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));

خروجی :

Array ( [a] => Horse [b] => Cat => Cow )

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

array_pop(array)

آخرین عنصر آرایه رو حذف میکنه .

	$a=array("Dog","Cat","Horse");
	array_pop($a);
	print_r($a);

Array ( [0] => Dog [1] => Cat )

array_product(array)

حاصلضرب تمام مقادیر آرایه رو حساب میکنه و بر میگردونه .

	$a=array(5,5);
	echo(array_product($a));// 25

array_push(array , value1,value2,…)

یک یا چند مقدار جدید رو به انتهای آرایه اضافه میکنه.

$a=array("Dog","Cat");
array_push($a,"Horse","Bird");
print_r($a);

Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )

array_rand(array ,number)

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

$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
print_r(array_rand($a,2));

Array ( [0] => c [1] => b )

array_reduce(array , function , initial)

این تابع مقادیر یک آرایه رو به یک تابع از قبل تعریف شده ارسال میکنه و نتیجه رو به صورت string (رشته) برمیگردونه.
initial یک مقدار جدا برای ارسال به آرایه است.

function myfunction($v1,$v2)
{
return $v1 . "-" . $v2;
}
$a=array("Dog","Cat","Horse");
print_r(array_reduce($a,"myfunction"));//-Dog-Cat-Horse

array_revers(array , preserve)

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

Array (

=> Horse [b] => Cat [a] => Dog )

array_search(value , array , restrict)

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

strict : اگر true باشه بین '۵' و ۵ فرق قائل میشه.به صورت پیش فرض false
$a=array("a"=>"5","b"=>5,"c"=>"5");
echo array_search(5,$a,true); // b

array_shift(array)

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

$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo array_shift($a);
print_r ($a);

array_slice(array, start , length)

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

$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_slice($a,1,2));

Array ( [0] => Cat [1] => Horse )

array_splice(array, start, length, array)

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

$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,0,2,$a2);
print_r($a1);

Array ( [0] => Tiger [1] => Lion [2] => Horse [3] => Bird )

array_sum(array)

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

$a=array(0=>"5",1=>"15",2=>"25");
echo array_sum($a);
// ۴۵

array_unique(array)

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

$a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");
print_r(array_unique($a));

Array ( [a] => Cat [b] => Dog )

array_values(array)

تمام مقادیر(values) یک آرایه رو به صورت یک آرایه جدید برمیگردونه.

$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");
print_r(array_values($a));

Array ( [0] => Cat [1] => Dog [2] => Horse )

array_walk(array,function ,parameter…)

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

function myfunction($value,$key)
{
	echo "The key $key has the value $value";
}
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");
array_walk($a,"myfunction");

خروجی

The key a has the value Cat
The key b has the value Dog
The key c has the value Horse

count(array)

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

$people = array("Peter", "Joe", "Glenn", "Cleveland");
$result = count($people);

echo $result;
// ۴

current(array)

مقدار فعلی یک آرایه رو بر میگردونه.

$people = array("Peter", "Joe", "Glenn", "Cleveland");

echo current($people) . "
";
// Peter
<h3 dir="ltr">end(array)</h3>
آخرین مقدار آرایه رو بر میگردونه.
<pre class="brush: php; gutter: true">
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people)."  ";
echo end($people);

Peter
Cleveland

extract(array, extract_rules,prefix)

این تابع یک آرایه انجمنی رو به عنوان اولین پارامتر میگیره و کلیدهای آرایه رو به متغیر تبدیل میکنه. کلیدهای آرایه نام متغیر و مقادیر کلیدها به مقدار متغیر تبدیل میشن.

$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "$a = $a; $b = $b; $c = $c";

extract_rules :
– EXTR_OVERWRITE : اگر متغیر از قبل وجود داشته باشه از بین میره و مقدار جدید داخلش قرار میگیره
– EXTR_SKIP : اگر متغیراز قبل وجود داشته باشه جایگزین نمیشه
– EXTR_PREFIX_SAME : درصورت همنام بودن یک پیشوند به متغیر اضافه میشه.
– EXTR_PREFIX_ALL : به همه متغیرها یک پیشوند اختصاص داده میشه
– EXTR_PREFIX_INVALID : فقط به کلیدهایی که نام مجاز برای متغیر شدن ندارن یا کلیدهای عددی یک پیشوند اضافه میشه.
– EXTR_IF_EXISTS : فقط اگر متغیر وجود داشته باشه جایگزین میشه
– EXTR_PREFIX_IF_EXISTS : در صورتی که متغیر از قبل موجود باشه یک پیشوند به متغیر جدید اضافه میشه.
– EXTR_REFS : متغیرها رو به صورت reference میسازه

prefix : اگر EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS استفاده بشه پیشوندی که در این قسمت مشخص میشه به متغیر ها داده میشه.

$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_SAME, 'dup');
echo "$a = $a; $b = $b; $c = $c; $dup_a = $dup_a;";
// $a = Original; $b = Dog; $c = Horse; $dup_a = Cat;

in_array(search ,array,type)

چک میکنه که آبا مقدار “search” در آرایه وجود داره یا نه.اگر type برابر با true باشه نوع داده هم چک میشه.

$people = array("Peter", "Joe", "Glenn", "Cleveland", 23);
if (in_array("23",$people, TRUE))
{
	echo "Match found";
}
else
{
	echo "Match not found";
}
if (in_array("Glenn",$people, TRUE))
{
	echo "Match found";
}
else
{
	echo "Match not found";
}

if (in_array(23,$people, TRUE))
{
	echo "Match found";
}
else
{
	echo "Match not found";
}
<pre class="brush: php; gutter: true">

<blockquote>Match not found Match found Match found</blockquote>
<h3 dir="ltr">next(array)</h3>
تابع next اشاره گر رو به عنصر بعدی آرایه حرکت میده و مقدار عنصر بعدی رو به خروجی میفرسته.
<pre class="brush: php; gutter: true">
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . " ";
echo next($people);

Peter
Joe

prev(array)

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

$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . " ";
echo next($people) . " ";
echo prev($people);

Peter
Joe
Peter

range(low,high,step)

تابع range یک آرایه میسازه با بازه ای از داده ها.
low : کمترین مقدار
high : بیشترین مقدار
step : مقدار زیاد شدن از کم به زیاد رو مشخص میکنه.

$number = range(0,5);
print_r ($number);

Array
(
[۰] => ۰
[۱] => ۱
[۲] => ۲
[۳] => ۳
[۴] => ۴
[۵] => ۵
)

reset(array)

انتقال اشاره گر به اولین عنصر آرایه.

$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . " ";
echo next($people) . " ";
echo reset($people);

خروجی

Peter
Joe
Peter

shuffle(array)

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

$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
shuffle($my_array);
print_r($my_array);

Array ( [0] => Cat [1] => Horse [2] => Dog )

sizeof(array, mode)

تعداد عناصر ارایه رو بر میگردونه.mode اگر ۱ تنظیم بشه آرایه های چند بعدی هم تشخیص داده میشه.

$people = array("Peter", "Joe", "Glenn", "Cleveland");
$result = sizeof($people);
echo $result;// 4

مثالهای این مجموعه رو از لینک زیر برداشتم :

http://www.w3schools.com/php/php_ref_array.asp

شهریور ۲۱, ۱۳۹۲ @ ۱:۳۵ ب.ظ

ممنون عزیز فقط
۱
function sqr($v)
۲
{
۳
return $v * $v;
۴
}
۵
$ar = array(2 , 3 , 4 , 5 , 6 );
۶
print_r(array_map(‘foo’ , $ar));

در اینجا باید اسم تابع foo باشد

پاسخ دادن
آبان ۵, ۱۳۹۲ @ ۱۰:۳۱ ق.ظ

سلام
تشکر و سپاس از این سایت عالی و زیبات
و کار زیبایی که انجام میدی

ممنون

کاش میشد کاری میکردی که این مطالب رو ما بتونیم پرینت بگیریم بدون اینکه ساید بار ها در صفحه پرینت بیاد

یعنی یک افزونه باشه که فقط مطلب رو به صورت پرینت به ما بده

ممنون

پاسخ دادن
دی ۲۴, ۱۳۹۲ @ ۲:۲۵ ق.ظ

خیلی عالی بود ممنون

پاسخ دادن
اسفند ۲۹, ۱۳۹۲ @ ۱۰:۵۵ ق.ظ

ممنون ….
کلی و مفید و جالب ….

پاسخ دادن
mehdi
تیر ۲۹, ۱۳۹۳ @ ۹:۳۴ ب.ظ

سلام
ببخشید اینجا جاش نیست ولی میخواستم بدونم چرا قبل از بعضی از متغیر ها و توابع … علامت @ میزارن.
مرسی

پاسخ دادن
    شهریور ۲۶, ۱۳۹۳ @ ۱۰:۵۳ ب.ظ

    سلام
    بعضی توابع که ممکنه خطا هایی رو به وجود بیارن مثل تابعfile-existsکه در صورت وجود فایل اروری نمیده و کارش رو انجام میده ولی اگر فایل وجود نداشته باشه اروری میده که با دستور at sign(@) میشه از نمایش ارور صرف نظر کرد که به شدت پیشنهاد میشه از این دستور استفاده نشه چون در هر صورت ارور ایجاد میشه و فقط ما باعث عدم نمایش اون میشه

    پاسخ دادن
سید هادی
فروردین ۱۷, ۱۳۹۴ @ ۵:۱۱ ب.ظ

خیلی متشکرم بسیار کامل بود .

پاسخ دادن
مهرداد
اردیبهشت ۲۱, ۱۳۹۴ @ ۱۱:۵۷ ب.ظ

آیا تابعی وجود دارد که آرایه و کلید و مقدار را بگیرد و مکان آن را مشخص کند
مثلا در یک آرایه دو بعدی که بعد اول عددی و بعد دوم انجمنی که بگوید کدام سطر است

پاسخ دادن
مهدی
مهر ۲۶, ۱۳۹۴ @ ۱:۴۵ ب.ظ

بنام خدا. با سلام. با تشکر. خدا خیرتون بده

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*