آرایه ها در php
در این مقاله قصد داریم تا آرایه ها رو در php بررسی کنیم و همچنین توابع مرتبط با آرایه ها رو بررسی کنیم.
انواع آرایه در php :
- آرایه های اندیس دار (Indexed arrays)
- آرایه های انجمنی (Associative arrays)
- آرایه های چند بعدی (Multidimensional arrays)
Indexed arrays
آرایه های اندیس دار که کلید آن ها اندیس (index) هست و به صورت پیش فرض از 0 شروع می شود.
$indexed_arr = array('ali','mahdi','abbas'); $indexed_arr[0]; $indexed_arr[1]; $indexed_arr[2];
اندیس های آرایه قابل تعیین از سمت ما هستند:
$indexed_arr = array(10=>'ali',11=>'mahdi',12=>'abbas'); echo $indexed_arr[10]; echo $indexed_arr[11]; echo $indexed_arr[12];
اندیس های تعریف نشده قابل دسترسی نیستند به طور مثال اندیس 0 . پس به طور پیش فرض اندیس ها از 0 شروع می شوند ولی توسط ما قابل تعیین هستند.
Associative arrays
آرایه هایی به صورت کلید – مقدار .
<?php $age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); echo "Peter is " . $age['Peter'] . " years old.";
درحقیقت آرایه انجمنی که کلید آن عدد باشد آرایه اندیس دار است.
Multidimensional arrays
به آرایه ای از آرایه ها یا آرایه های چند بعدی یا Multidimensional arrays می گویند.
<?php $multi_arr = array( 'Germany' => array('lamy','pelikan','FaberCastle'), 'Japan' => array('pilot','uniball','platinum'), 'US' => array('sheifer','parker','cross') );
نکته مهم : بر خلاف زبان جاوا که باید تمامی عناصر آرایه از یک جنس باشند در زبان php می تواند هرکدام از اعضا از یک جنس باشد.
<?php $multitype_arr = array('fname'=>'ali','lname'=>'alavi','id'=>1110);
توابع مربوط به مرتب سازی آرایه ها
ورودی تمامی توابع زیر آرایه است و خروجی آن هم آرایه مرتب شده. دقت داشته باشید نوع آرایه ورودی مهم است به ازای هر تابع.
sort : آرایه های اندیس دار را مرتب می کند.
rsort : آرایه های اندیس دار را به صورت معکوس مرتب می کند.
asort : آرایه های انجمنی را بر حسب مقدار مرتب می کند.
arsort : آرایه های انجمنی را بر حسب مقدار به صورت معکوس مرتب می کند.
ksort : آرایه های انجمنی را بر حسب کلید مرتب می کند.
krsort : آرایه های انجمنی را بر حسب کلید به صورت معکوس مرتب می کند.
توابع مربوط به حذف عناصر در آرایه
unset : این تابع یک عنصر از آرایه را به وسیله اندیس آن از آرایه حذف می کند ، که اگر آرایه اندیس داشته باشید یا انجمنی باشد (به وسیله کلید).
<?php $a = array(1,2,3,4,5); unset($a[2]); print_r($a); /* Array ( [0] => 1 [1] => 2 [3] => 4 [4] => 5 ) */
به طور مثال در کد بالا آرایه شماره دو حذف شده است.
نکته : این تابع می تواند چندین مورد را برای حذف از آرایه قبول کند:
<?php unset($a[2],$a[3]);
نکته : تابع unset برای متغیر ها هم کاربرد داره و میشه مقدار اون ها رو NULL کرد.
array_splice : این تابع آرایه را از نقطه شروع خاص به تعداد خاص حذف می کند.
<?php $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); array_splice($a1,0,2); print_r($a1); /* Array ( [0] => purple [1] => orange [c] => blue [d] => yellow ) */
صورت دیگر این تابع به شکل زیر است :
<?php array_splice($array,$start,$length,$array) ?>
پارامتر های این تابع :
<?php $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); $a2=array("a"=>"purple","b"=>"orange"); array_splice($a1,0,2,$a2); print_r($a1); /* Array ( [0] => purple [1] => orange [c] => blue [d] => yellow ) */
این تابع یعنی حذف یه سری عضو و جایگزین کردن اون با موارد جدید در مکان جدید. پارامتر های این تابع :
- پارامتر اول آرایه ای که قراره حذف روش انجام بشه .
- پارامتر دوم نقطه شروع حذف.
- پارامتر سوم طول حذف آرایه.
- پارامتر چهارم آرایه جایگزین.
array_slice
: اگر بخواهیم یه قسمتی خاصی از آرایه رو بر اساس اندیس برگردونیم باید از تابع array_slice
استفاده کنیم. مثلا از 10 عوض یک آرایه شماره 0 تا 6 آن را می خواهیم.
$categories = array_slice($category_all, 0, 6);
ورود و خروج عضو در آرایه ها
ورود و خروج عضو در آرایه یا از ابتدا انجام میشه یا از انتها .
ورود از ابتدا array_unshift
ورود از انتها array_push
خروج از ابتدا array_shift
خروج از انتها array_pop
array_unshift : اعضایی که به عنوان پارامتر دوم داده میشه به این تابع به آرایه ای که به عنوان پارامتر اول به این تابع داده شده در اول آرایه اول گذاشته میشه.
<?php $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); /* Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana ) */
array_push : اعضایی که به عنوان پارامتر دوم داده میشه به این تابع به آرایه ای که به عنوان پارامتر اول به این تابع داده شده در انتهای آرایه اول گذاشته میشه.
<?php $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); /* Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ) */
این تابع معادل کد زیر هست :
<?php $arr[] = $item;
array_shift : خروج یک عضو از ابتدای یک آرایه ( المان اول آرایه را حذف می کند) :
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); /* Array ( [0] => banana [1] => apple [2] => raspberry ) */
array_pop : خروج یک عضو از انتهای یک آرایه ( المان آخر آرایه را حذف می کند ) :
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); /* Array ( [0] => orange [1] => banana [2] => apple ) */
حرکت در میان اعضای یک آرایه
حرکت در میان آرایه در طول یک برنامه بوسیله توابع زیر انجام می گردد (پارامتر تمامی توابع زیر آرایه مربوطه است)
current : عضو جاری را نشان می دهد. اگر تا به حال هیچ حرکتی در میان آرایه انجام نداده باشید میشه عضو اول.
next : هر عضوی که current تا حالا نشون داده بعدیش رو برمیگردونه و از اونجا به بعد current تغییر می کنه.
prev : عضو قبلی current آرایه رو برمیگردونه و current از اونجا به بعد تغییر می کنه.
end : عضو جاری هر جا باشه به انتهای آرایه میره و عضو آخر رو بر میگردونه و current هم از اونجا به بعد میشه عضو آخر.
<?php $transport = array('foot', 'bike', 'car', 'plane'); $mode = current($transport); // $mode = 'foot'; $mode = next($transport); // $mode = 'bike'; $mode = current($transport); // $mode = 'bike'; $mode = prev($transport); // $mode = 'foot'; $mode = end($transport); // $mode = 'plane'; $mode = current($transport); // $mode = 'plane'; $arr = array(); var_dump(current($arr)); // bool(false) $arr = array(array()); var_dump(current($arr)); // array(0) { } ?>
اجتماع و اشتراک متمم آرایه ها
توابع این قسمت که عملیات های اجتماع و اشتراک و متمم را انجام می دهد ورودی دو آرایه است و خروجی یک آرایه.
array_merge : این تابع دو آرایه را با هم ادغام می کند که در عملیات ریاضی به آن اجتماع می گوییم.
<?php $a1=array("red","green"); $a2=array("blue","yellow"); print_r(array_merge($a1,$a2)); /* Array ( [0] => red [1] => green [2] => blue [3] => yellow ) */
array_intersect : این تابع اعضای مشترک دو آرایه را بر می گرداند که در ریاضی به آن عملیات اشتراک گفته می شود.
<?php $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); $a2=array("e"=>"red","f"=>"green","g"=>"blue"); $result=array_intersect($a1,$a2); print_r($result); /* Array ( [a] => red [b] => green [c] => blue ) */
array_diff : اعضای غیر مشترک دو آرایه که در ریاضی متمم دو مجموعه به آن گفته می شود.
<?php $array1 = array("a" => "green", "red", "blue", "red"); $array2 = array("b" => "green", "yellow", "red"); $result = array_diff($array1, $array2); /* Array( [1] => blue ) */
سایر توابع مربوط به آرایه
array_merge : ادغام دو آرایه . دو تا پارامتر میگیره که هر دو آرایه هستند و آرایه دوم رو میچسبونه به انتهای آرایه اول.
<?php $a1=array("red","green"); $a2=array("blue","yellow"); print_r(array_merge($a1,$a2)); /* Array ( [0] => red [1] => green [2] => blue [3] => yellow ) */
is_array : این تابع ورودی میگیره و بررسی می کنه آرایه هست یا خیر.
count : این تابع ورودی یک آرایه میگیره و تعدادش رو برمیگردونه.(دقت داشته باشید اعضای آرایه از 0 شروع میشه)
explode : این تابع یک رشته به همراه یک جدا کننده میگیره و رشته رو با جداکننده تبدیل به آرایه می کنه (ورودی رشته و جداکننده و خروجی آرایه).
<?php explode ( $delimiter , $string ); ?>
پارامتر های این تابع :
- delimiter : جداکننده.
- string : رشته ورودی که در درون خودش از جداکننده (پارامتر بالا) داشته باشه.
<?php $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2
implode : این تابع ورودی یک آرایه می گیره و یک جدا کننده و برعکس تابع بالا آرایه رو به رشته تبدیل می کنه.
<?php implode ( string $glue , array $pieces ) ?>
این تابع در کوئری های SQL زمانی که میخواید جستجو داشته باشید استفاده داره . چرا که آرایه از جنس php در SQL نمیشه مستقیم استفاده بشه و بهتره رشته بهش بدیم.
<?php $id_nums = array(1,6,12,18,24); $id_nums = implode(", ", $id_nums); $sqlquery = "Select name,email,phone from usertable where user_id IN ($id_nums)"; // $sqlquery becomes "Select name,email,phone from usertable where user_id IN (1,6,12,18,24)"
extract : این تابع ورودی یک آرایه انجمنی می گیره و به وسیله کلید ها یه سری متغیر از روی آرایه ورودی میسازه.
<?php $a = "Original"; $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse"); extract($my_array); echo "\$a = $a; \$b = $b; \$c = $c"; /* $a = Cat; $b = Dog; $c = Horse */
نکته : این تابع بسیار پر کاربرد در ورودی توابع هست. به طور مثال شما ورودی رو به جای این که چندین متغیر قرار بدید یک آرایه انجمنی قرار میدید و به وسیله extract به متغیر ها دسترسی پیدا می کنید و کدتون تمیز تر میشه.
array_search : یک عضو رو درون یک آرایه جستجو می کنه و index اش رو بر میگردونه . (شروع ایندکس گذاری در آرایه از 0 شروع میشود)
<?php array_search ( $needle , $array ) ?>
پارامتر اول عضو مورد جستجو و پارامتر دوم آرایه مد نظر. خروجی عدد است و اگر یافت نشد false رو بر می گردونه.
in_array : جستجوی یک عضو درون یک آرایه . تفاوتش با تابع array_search اینه که در صورت یافتن عضو تنها true بر می گردونه ولی در تابع قبل موقعیتش رو بر میگردوند.
<?php in_array ( $needle , $array ) ?>
array_map : یه تابع خاص رو روی تمامی اعضای یک آرایه اجرا می کنه .
<?php array_map($callback,$array1,$array2,...); ?>
پارامتر های این تابع :
- callback : این همون تابعیه که قراره روی اعضای آرایه ما اجرا بشه.
- array : یک یا چند آرایه که تابع پارامتر اول روی اونها اجرا بشه.
<?php function myfunction($num){ return($num*$num); } $a=array(1,2,3,4,5); print_r(array_map("myfunction",$a)); /* Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 ) */
مثلا در تابع بالا تمامی اعضای یک آرایه به توان رسیده اند. در این تابع یک آرایه داده ایم و خروجی هم یک آرایه است.
نکته : اگر اون تابع عملگر قرار باشه دو عضو از دو آرایه به عنوان پارامتر بگیره پس باید دو آرایه به تابع array_map بدیم.
<?php function show_Spanish($n, $m){ return("The number $n is called $m in Spanish"); } $a = array(1, 2, 3, 4, 5); $b = array("uno", "dos", "tres", "cuatro", "cinco"); $c = array_map("show_Spanish", $a, $b); print_r($c); /* Array ( [0] => The number 1 is called uno in Spanish [1] => The number 2 is called dos in Spanish [2] => The number 3 is called tres in Spanish [3] => The number 4 is called cuatro in Spanish [4] => The number 5 is called cinco in Spanish ) */
array_value : تبدیل آرایه انجمنی به اندیس دار با حذف کلید و تبدیل آن به اندیس .
<?php $a=array("Name"=>"Peter","Age"=>"41","Country"=>"USA"); print_r(array_values($a)); /* Array ( [0] => Peter [1] => 41 [2] => USA ) */
serialize : این تابع مشترک میان آرایه ها و اشیا هست . برای ثبت یک آرایه در پایگاه داده ما مجاز به استفاده مستقیم از آرایه نیستیم . پس باید اون رو به شکلی در بیاریم که در پایگاه داده ثبت بشه. تابع serialize اون رو به شکل بهینه برای پایگاه داده در میاره و در نقطه مقابل برای بازگشت رشته serialize شده به حالت آرایه ما تابع unserialize رو داریم.
unserialize : رشته serialize شده رو تبدیل به آرایه می کنه. دقت داشته باشید که رشته ورودی باید از نظر قوانین serialize معتبر باشه.
دیدگاهتان را بنویسید