آرایه ها در PHP – مقدمه
در این بخش از آموزش پی اچ پی، می خواهیم با انواع آرایه ها در PHP آشنا شویم. در ابتدا با تعریف آرایه در PHP آشنا می شویم.
سپس در مورد انواع آرایه ها در PHP صحبت خواهیم کرد. همچنین نحوه استفاده از آرایه در PHP را خواهیم آموخت. در ادامه درباره نحوه دسترسی به عناصر آرایه و همین طور جستجود در آرایه در پی اچ پی صحبت می کنیم.
در انتها نیز به کار با آرایه ها در PHP و همین طور حلقه foreach در آرایه و حلقه for در آرایه ها خواهیم پرداخت.
در ادامه آموزش کار با آرایه ها در PHP به توابع کار با آرایه ها اشاره خواهیم کرد. همچنین مثال های بسیار زیادی در مورد آرایه های تو در تو در PHP و همین طور آرایه های انجمنی در PHP خواهیم زد.
یکی دیگر از مباحث مطرح شده در این آموزش، مثال های کاربردی از آرایه های دو بعدی و همین طور آرایه های چند بعدی در PHP می باشد. همچنین در مورد ترکیب آرایه ها و ادغام آرایه ها نیز صحبت خواهیم کرد.
در ادامه مقاله، به بررسی توابع کار با آرایه ها در PHP می پردازیم. ضمن اینکه به روش های مختلف نحوه پیمایش آرایه در PHP را بیان می کنیم. در ادامه کار با توابع آرایه ها در PHP به نحوه مرتب سازی آرایه ها در PHP نیز به صورت مفصل اشاره خواهیم کرد.
این آموزش دارای سرفصل زیر هست که می توانید با زدن روی هر لینک، به بخش مورد نظر خود منتقل شوید:
این آموزش، یکی از بخش های آموزش های رایگان PHP در سایت وبمستر وردپرس می باشد. در صورتی که می خواهید به کلیه بخش های این سری آموزشی رایگان دسترسی داشته باشید، می توانید از لینک زیر استفاده کنید:
آرایه در PHP چیست ؟
در اکثر موارد، نوع داده هایی که در PHP تعریف می کنیم، عملا فقط یک مقدار را در یک متغیر ذخیره می کنید. اما با آرایه ها در PHP (و همین طور object) عملا می توانیم چندین نوع مقدار را در یک متغیر ذخیره کنیم.
عملا با آرایه می توانیم چندین مقدار را در آن واحد در یک متغیر یکتا داشته باشیم. در واقع یک متغیر آرایه ای می تواند شامل چندین عضو باشد.
در واقع آرایه، یک لیست از عناصر می باشد. این لیست توسط یک متغیر نگهداری می شود.
نکته: در صورتی که با متغیرها در PHP آشنایی ندارید، می توانید از مقاله دیگر سایت با عنوان «انواع متغیر ها در PHP» استفاده کنید.
یک نکته مهم در مورد عناصر آرایه در PHP این می باشد که عناصر یک آرایه در زبان پی اچ پی می توانند از یک نوع نباشند. در واقع حتما نباید همه عناصر داخل آرایه همگن باشند. این یعنی ما به راحتی می توانیم از انواع متغیر های مختلف درون یک آرایه استفاده کنیم.
دقت داشته باشید که یکی از قدرتمند زبان ها برای پردازش روی آرایه ها و کار با آن ها، زبان php می باشد این مورد نظر من، یکی از مزیت های php نسبت به زبان هایی مثل c# یا جاوا می باشد.
تعریف آرایه ها در PHP
برای تعریف یک آرایه در PHP ، می توانید از دو شکل مختلف استفاده کنید. در روش اول برای تعریف یک آرایه می باید از کلمه کلیدی array به همراه پرانتز های باز و بسته استفاده کنید.
در این روش در داخل پرانتز های باز و بسته، عناصر آرایه قرار داده می شوند. در نظر داشته باشید که عناصر آرایه توسط کاما یا ” , ” از همدیگر جدا می شوند.
روش دوم برای تعریف یک آرایه استفاده از short array syntax می باشد. در این روش دیگر نیازی به ذکر کلمه کلیدی array نبوده و شما عناصر آرایه را درون [ ] تعریف خواهید کرد. در واقع کلیه عناصر آرایه در بین براکت باز و بسته قرار خواهند گرفت.
در زیر دو مثال برای هر دو سینتکس تعریف آرایه ها در PHP زده شده است:
/*Simple array*/ $msn_simple_array = array( 5, 'Mehdi', 3.14, array( 1, 2, 3, 4 ) ); var_dump( $msn_simple_array ); echo '<hr>'; /*Short array syntax*/ $msn_short_array_syntax = [ 10, 20, 30, 40 ];
انواع آرایه ها در PHP
در کل سه نوع آرایه در PHP موجود می باشد. انواع آرایه ها در PHP عبارتند از:
$msn_customized_array_index = [ ۸ => 'ahmad', ۱۰ => 'Mehdi', 'abbas', ۲۰ => 'Soltani', ۳۰ => 'Gholam', 'ghanbarak', ۳۱ => 'mamad', 'Havicheh', ]; var_dump( $msn_customized_array_index ); //The return is something like this: array (size=7) ۸ => string 'ahmad' (length=5) ۱۰ => string 'Mehdi' (length=5) ۱۱ => string 'abbas' (length=5) ۲۰ => string 'Soltani' (length=7) ۳۰ => string 'Gholam' (length=6) ۳۱ => string 'mamad' (length=5) ۳۲ => string 'Havicheh' (length=8)
/*Simple associative arrays*/ $msn_simple_associative_array = [ 'first_name' => 'Mehdi', 'last_name' => 'Soltani', 'profession' => 'programmer', ]; var_dump( $msn_simple_associative_array ); //Return is something like this: array (size=3) 'first_name' => string 'Mehdi' (length=5) 'last_name' => string 'Soltani' (length=7) 'profession' => string 'programmer' (length=10)
/*Simple Multidimensional arrays*/ $msn_simple_multidimensional_array = [ [ 'first_name' => 'Mehdi', 'last_name' => 'Soltani', 'profession' => 'programmer', 'friend_name' => 'Agha Gholam', ], [ 'first_name' => 'Saeed', 'last_name' => 'Hoseini', 'profession' => 'Digital Marketer', ], 'abbas agha', ۶, ]; var_dump( $msn_simple_multidimensional_array ); //Return is something like this: array (size=5) ۰ => array (size=4) 'first_name' => string 'Mehdi' (length=5) 'last_name' => string 'Soltani' (length=7) 'profession' => string 'programmer' (length=10) 'friend_name' => string 'Agha Gholam' (length=11) ۱ => array (size=3) 'first_name' => string 'Saeed' (length=5) 'last_name' => string 'Hoseini' (length=7) 'profession' => string 'Digital Marketer' (length=16) ۲ => string 'abbas agha' (length=10) ۳ => int 6
دسترسی به عناصر آرایه و مقداری دهی به آرایه ها در PHP
بسته به اینکه چه آرایه ای را استفاده می کنیم، نحوه دسترسی به عناصر آن، ممکن است کمی با سایر آن ها متفاوت باشد.
در حالت کلی برای دسترسی به عناصر آرایه باید از اسم آرایه به همراه علامت [ ] (براکت باز و بسته) استفاده نمود. حال در صورتی که آرایه به صورت عددی باشد، کافی است از عدد مرتبط با ایندکس آن استفاده شود.
در صورتی که آرایه به صورت انجمنی باشد، می باید از نام کلید آن در درون براکت باز و بسته به صورت [‘key’] برای دسترسی به عناصر آن استفاده کرد.
در صورتی که بخواهیم به عناصر داخلی یک آرایه چند بعدی در PHP، دسترسی داشته باشیم، باید از چندین علامت براکت باز و بسته، به صورت پشت سر هم استفاده کنیم. بسته به اینکه این عناصر داخلی عددی یا انجمنی باشند نیز، می باید ایندکس مورد نظر به صورت عددی یا رشته را برای دسترسی کامل به آن عنصر، ذکر نمود.
در زیر مثال های متعددی در این بخش زده شده است که در هر کدام به صورت جداگانه به این مطلب اشاره شده است:
فراخوانی ایندکس عددی در آرایه عددی که در آرایه موجود نباشد
اگر به خانه ای از آرایه که وجود ندارد، بخواهیم دسترسی پیدا کنیم، در این صورت یک Notice با عنوان Undefined Offset در خروجی نمایش داده خواهد شد. این خطا، جلوی اجرای کد را نمی گیرد، اما مقدار خانه فراخوانی شده را برابر NULL در نظر خواهد گرفت.
/*Add or change array elements*/ $msn_customized_array_index[12] = 'Ghasem'; $msn_customized_array_index[10] = 'Mehran'; var_dump( $msn_customized_array_index ); $msn_simple_associative_array['first_name'] = 'gholam'; $msn_simple_associative_array['age'] = '230 years'; var_dump( $msn_simple_associative_array ); /*Check for being empty in array*/ var_dump( $msn_customized_array_index[42] ?? null ); var_dump( isset( $msn_customized_array_index[42] ) ); var_dump( empty( $msn_customized_array_index[42] ) ); echo isset( $msn_customized_array_index[42] ) ? $msn_customized_array_index[42] : 'Default Value'; //The return is in the following: array (size=8) ۸ => string 'ahmad' (length=5) ۱۰ => string 'Mehran' (length=6) ۱۱ => string 'abbas' (length=5) ۲۰ => string 'Soltani' (length=7) ۳۰ => string 'Gholam' (length=6) ۳۱ => string 'mamad' (length=5) ۳۲ => string 'Havicheh' (length=8) ۱۲ => string 'Ghasem' (length=6) array (size=4) 'first_name' => string 'gholam' (length=6) 'last_name' => string 'Soltani' (length=7) 'profession' => string 'programmer' (length=10) 'age' => string '230 years' (length=9) null false true Default Value
*Add value to an array without having an index for it*/ $msn_adding_to_array[20] = 'Mehdi Soltani'; $msn_adding_to_array[] = 100; $msn_adding_to_array[] = 'Agha Gholam'; var_dump( $msn_adding_to_array ); /*Simple Multidimensional arrays*/ $msn_simple_multidimensional_array = [ [ 'first_name' => 'Mehdi', 'last_name' => 'Soltani', 'profession' => 'programmer', 'friend_name' => 'Agha Gholam', ], [ 'first_name' => 'Saeed', 'last_name' => 'Hoseini', 'profession' => 'Digital Marketer', ], 'abbas agha', ۶, ]; $msn_simple_multidimensional_array[] = [ 'first_name' => 'Mehdi', 'last_name' => 'Gholami', 'profession' => 'Inkareh', 'friend_name' => 'Saeed Hoseini', ]; var_dump( $msn_simple_multidimensional_array ); //The return is: array (size=3) ۲۰ => string 'Mehdi Soltani' (length=13) ۲۱ => int 100 ۲۲ => string 'Agha Gholam' (length=11) array (size=5) ۰ => array (size=4) 'first_name' => string 'Mehdi' (length=5) 'last_name' => string 'Soltani' (length=7) 'profession' => string 'programmer' (length=10) 'friend_name' => string 'Agha Gholam' (length=11) ۱ => array (size=3) 'first_name' => string 'Saeed' (length=5) 'last_name' => string 'Hoseini' (length=7) 'profession' => string 'Digital Marketer' (length=16) ۲ => string 'abbas agha' (length=10) ۳ => int 6 ۴ => array (size=4) 'first_name' => string 'Mehdi' (length=5) 'last_name' => string 'Gholami' (length=7) 'profession' => string 'Inkareh' (length=7) 'friend_name' => string 'Saeed Hoseini' (length=13)
پیمایش آرایه ها در PHP یا Array Traversing
در بسیاری از موارد نیاز داریم که بر روی کلیه عناصر یک آرایه پیمایش انجام دهیم. این به معنی این است که ما بتوانیم خانه های آرایه را، تک به تک خوانده و به عنوان مثال، عملی را روی آن ها انجام دهیم یا از آن ها در اجرای برنامه خود استفاده نماییم.
برای این کار روش های مختلفی وجود دارد. ساده ترین روش استفاده از حلقه for یا while برای پیمایش آرایه ها می باشد. مشکل این روش ها مثلا برای حلقه for در آرایه، این می باشد که باید همواره طول یک آرایه را بدانیم. در این صورت می توانیم آن را پیمایش کنیم.
همین طور برای مثلا حلقه while در آرایه ، این مشکل وجود دارد که در صورت موجود نبودن عنصر آرایه در یک درایه خاص عددی، در این صورت با ارور مواجه می شویم.
کلیه این موارد قابل حل بوده و در زیر راه حل های مختلف برای حالت های مختلف در آن بیان خواهند شد. اما بهترین روش برای پیمایش آرایه ها در php استفاده از حلقه foreach می باشد که عملا دیگر با هیچکدام از موارد بالا، دست به گریبان نخواهیم شد.
نکته: در صورتی که با حلقه ها در PHP آشنایی ندارید، می توانید از مقاله زیر که به صورت کامل، حلقه ها در آن با مثال تشریح شده اند، استفاده نمایید:
چک کردن ست شدن عناصر آرایه در هنگام پیمایش آن
زمانی می توانید از حلقه for یا while برای پیمایش آرایه ها استفاده کنید، که خانه های آرایه به ترتیب پشت سرهم پر شده باشند. یعنی ایندکس ها دقیقا وجود داشته باشند.
در صورتی که ممکن است ایندکس ها در حین پیمایش آرایه، موجود نباشد، حتما باید در داخل حلقه، این موضوع چک شود تا به خطاهای منطقی در حین اجرای برنامه برخورد نکنیم.
/*Using for loop to iterate in an array*/ $simple_loop_on_array = [ 100, 200, 300 ]; for ( $i = 0; $i < count( $simple_loop_on_array ); $i ++ ) { echo $simple_loop_on_array[ $i ]; if ( $i < count( $simple_loop_on_array ) - 1 ) { echo ' - '; } } echo '<br>'; /*Using while loop to iterate in an array*/ $counter = 0; while ( $counter < count( $simple_loop_on_array ) ) { echo $simple_loop_on_array[ $counter ]; if ( $counter < count( $simple_loop_on_array ) - 1 ) { echo ' - '; } $counter ++; } echo '<br>'; /*Check isset and not empty for an array before iterating*/ if ( isset( $simple_loop_on_array ) && ! empty( $simple_loop_on_array ) ) { for ( $i = 0; $i < count( $simple_loop_on_array ); $i ++ ) { echo $simple_loop_on_array[ $i ]; if ( $i < count( $simple_loop_on_array ) - 1 ) { echo ' - '; } } } //The return is: ۱۰۰ - ۲۰۰ - ۳۰۰ ۱۰۰ - ۲۰۰ - ۳۰۰ ۱۰۰ - ۲۰۰ - ۳۰۰
/*Using array_keys to get keys in an array*/ $msn_get_array_keys = array_keys( $msn_simple_associative_array ); $msn_get_array_values = array_values( $msn_simple_associative_array ); var_dump( $msn_get_array_keys ); var_dump( $msn_get_array_values ); /*Sample of traversing in multi-dimensional array */ $employees = []; $employees['employee-1'] = [ 'id' => 1394, 'first_name' => 'gholam', 'last_name' => 'gholami', 'profession' => 'khafan programmer', ]; $employees['employee-2'] = [ 'id' => 1395, 'first_name' => 'Sina', 'last_name' => 'Sajadi', 'profession' => 'front-end developer', ]; $employees['employee-3'] = [ 'id' => 1396, 'first_name' => 'Saeed', 'last_name' => 'Kamyabi', 'profession' => 'back-end developer', ]; $employees['employee-4'] = [ 'id' => 1397, 'first_name' => 'Abas', 'last_name' => 'Hajkenari', 'profession' => 'translator', ]; $employees['employee-5'] = [ 'id' => 1398, 'first_name' => 'Mamad', 'last_name' => 'Reshad', 'profession' => 'operator', ]; $employees['employee-6'] = [ 'id' => 1399, 'first_name' => 'Matin', 'last_name' => 'Tayefi', 'profession' => 'khafan operator', ]; $employees['employee-7'] = [ 'id' => 1400, 'first_name' => 'Siavash', 'last_name' => 'Sedaghat', 'profession' => 'accountant', ]; $employees['employee-8'] = [ 'id' => 1401, 'first_name' => 'Siavash', 'last_name' => 'Kameli', 'profession' => 'khafan accountant', ]; $departments = []; $employee_counter = 1; foreach ( $employees as $employee ) { switch ( $employee_counter ) { case 1: case 2: case 3: $departments['software_team'][] = $employee; break; case 4: case 5: case 6: $departments['reservation_team'][] = $employee; break; case 7: case 8: $departments['accounting_team'][] = $employee; break; } $employee_counter ++; } foreach ( $departments as $key_department => $value_department ) { echo '<pre>'; echo '<em> Employees of ' . $key_department . '</em>:<br>'; foreach ( $value_department as $employeee ) { echo "\t" . '<strong>ID of Employee</strong>: ' . $employeee['id']; echo ' , <strong>Name: </strong>' . $employeee['first_name']; echo ' , <strong>Family:</strong> ' . $employeee['last_name']; echo ' , <strong>Profession:</strong> ' . $employeee['profession']; echo '<br>'; } echo '</pre>'; } echo '<br>'; //The return is : array (size=4) ۰ => string 'first_name' (length=10) ۱ => string 'last_name' (length=9) ۲ => string 'profession' (length=10) ۳ => string 'age' (length=3) array (size=4) ۰ => string 'gholam' (length=6) ۱ => string 'Soltani' (length=7) ۲ => string 'programmer' (length=10) ۳ => string '230 years' (length=9) Employees of software_team: ID of Employee: 1394 , Name: gholam , Family: gholami , Profession: khafan programmer ID of Employee: 1395 , Name: Sina , Family: Sajadi , Profession: front-end developer ID of Employee: 1396 , Name: Saeed , Family: Kamyabi , Profession: back-end developer Employees of reservation_team: ID of Employee: 1397 , Name: Abas , Family: Hajkenari , Profession: translator ID of Employee: 1398 , Name: Mamad , Family: Reshad , Profession: operator ID of Employee: 1399 , Name: Matin , Family: Tayefi , Profession: khafan operator Employees of accounting_team: ID of Employee: 1400 , Name: Siavash , Family: Sedaghat , Profession: accountant ID of Employee: 1401 , Name: Siavash , Family: Kameli , Profession: khafan accountant
/*Sample of recursive function to iterate on n-dimensional array*/ function msn_iterate_array( $array, $level = 1 ) { foreach ( $array as $key => $value ) { if ( is_array( $value ) ) { //echo 'level is: '. $level . '<br>'; echo str_repeat( " ", 4 * ( $level - 1 ) ); echo $key, ' => <br>'; msn_iterate_array( $value, $level + 1 ); } else { echo str_repeat( " ", 4 * ( $level - 1 ) ); echo $key, ' => ', $value, ' '; } echo '<br>'; } } $msn_sample_recursive_on_array = [ ۱۰, ۲۰, ۳۰, [ 'name' => 'safdar', 'family' => 'safdari', 'Jangoolers' => [ 'bandbazi', 'sedaye soosk', 'poshtak varo' ], ], ۵۰, [ ۲۰۰, ۳۰۰, ۵۰۰ ] ]; msn_iterate_array( $msn_sample_recursive_on_array ); //The return is something like this in the following: ۰ => 10 ۱ => 20 ۲ => 30 ۳ => name => safdar family => safdari Jangoolers => ۰ => bandbazi ۱ => sedaye soosk ۲ => poshtak varo ۴ => 50 ۵ => ۰ => 200 ۱ => 300 ۲ => 500
مرتب سازی آرایه ها در PHP
همان گونه که پیشتر هم اشاره شد، توابع کار با آرایه ها در PHP ، بسیار متنوع می باشد. از جمله توابع آرایه ها در پی اچ پی، توابع مرتب سازی یا همان sort کردن در این زبان می باشد.
توابع مرتب سازی آرایه های PHP ، باعث می شود تا کار با آرایه های زبان پی اچ پی، بسیار آسان تر شود. در زیر به مهم ترین آن ها به اختصار، پرداخته ایم:
/*Simple array sort*/ $msn_simple_array_for_sort = [ 110, 13, 2, 253, 99, 45, 73, 56 ]; sort( $msn_simple_array_for_sort ); var_dump( $msn_simple_array_for_sort ); echo '<br>'; /*Simple array with different types and Descending sort*/ $msn_simple_array_for_sort = [ 110, 13, 'gholam', 2, 253, 99, 45, 85.2, 'Ghanbarak', 73, 56 ]; sort( $msn_simple_array_for_sort ); var_dump( $msn_simple_array_for_sort ); /*Simple array with different types and Descending sort*/ $msn_simple_array_for_sort = [ 110, 13, 'gholam', 2, 253, 99, 45, 85.2, 'Ghanbarak', 73, 56 ]; rsort( $msn_simple_array_for_sort ); var_dump( $msn_simple_array_for_sort ); //The return is: array (size=8) ۰ => int 2 ۱ => int 13 ۲ => int 45 ۳ => int 56 ۴ => int 73 ۵ => int 99 ۶ => int 110 ۷ => int 253 array (size=11) ۰ => string 'Ghanbarak' (length=9) ۱ => string 'gholam' (length=6) ۲ => int 2 ۳ => int 13 ۴ => int 45 ۵ => int 56 ۶ => int 73 ۷ => float 85.2 ۸ => int 99 ۹ => int 110 ۱۰ => int 253 array (size=11) ۰ => int 253 ۱ => int 110 ۲ => int 99 ۳ => float 85.2 ۴ => int 73 ۵ => int 56 ۶ => int 45 ۷ => int 13 ۸ => int 2 ۹ => string 'gholam' (length=6) ۱۰ => string 'Ghanbarak' (length=9)
در زیر چند مثال بسیار ساده برای درک بهتر نحوه مرتب سازی در آرایه های انجمنی، زده شده است. در انتهای کدها هم، می توانید نتیجه خروجی آن را نیز مشاهده فرمایید:
*Simple asort for associative array*/ $simple_asort_for_associative_array_1 = [ 'first' => 'Mehdi', 'second' => 'gholam', 'third' => 'Akbar', 'forth' => 'Jafar', ]; asort( $simple_asort_for_associative_array_1 ); var_dump( $simple_asort_for_associative_array_1 ); /*Simple arsort for associative array*/ $simple_asort_for_associative_array_2 = [ 'first' => 'Soltani', 'second' => 'gholami', 'third' => 'Akbari', 'forth' => 'Jafari', ]; arsort( $simple_asort_for_associative_array_2 ); var_dump( $simple_asort_for_associative_array_2 ); /*Simple ksort for associative array*/ $simple_asort_for_associative_array_3 = [ 'name' => 'Mehdi', 'family' => 'Soltani', 'id' => '7728028', 'age' => '22', ]; ksort( $simple_asort_for_associative_array_3 ); var_dump( $simple_asort_for_associative_array_3 ); /*Simple krsort for associative array*/ $simple_asort_for_associative_array_3 = [ 'name' => 'Mehdi', 'family' => 'Soltani', 'id' => '7728028', 'age' => '22', ]; krsort( $simple_asort_for_associative_array_3 ); var_dump( $simple_asort_for_associative_array_3 ); //The return is: array (size=4) 'third' => string 'Akbar' (length=5) 'forth' => string 'Jafar' (length=5) 'first' => string 'Mehdi' (length=5) 'second' => string 'gholam' (length=6) array (size=4) 'second' => string 'gholami' (length=7) 'first' => string 'Soltani' (length=7) 'forth' => string 'Jafari' (length=6) 'third' => string 'Akbari' (length=6) array (size=4) 'age' => string '22' (length=2) 'family' => string 'Soltani' (length=7) 'id' => string '7728028' (length=7) 'name' => string 'Mehdi' (length=5) array (size=4) 'name' => string 'Mehdi' (length=5) 'id' => string '7728028' (length=7) 'family' => string 'Soltani' (length=7) 'age' => string '22' (length=2)
مرتب سازی سفارشی در PHP
با این وجود که توابع گفته شده داخلی زبان PHP برای سورت کردن بسیار کاربردی هستند، اما بسیار از مواقع این امکان وجود دارد که ما نیاز داشته باشیم تا از توابع مرتب سازی سفارشی که توسط خودمان تعریف شده است، استفاده نماییم.
این مورد بسیار کاربردی بوده و در بسیار از موارد ممکن است استفاده شود. بیشترین کاربرد تابع های مرتب سازی سفارشی، زمانی می باشد که شما آرایه ای از آرایه ها یا همان Multi dimensional array یا آرایه ای از اشیا را دارید. (منظور همان Array of Objects می باشد)
در این صورت شما نیاز خواهید داشت که تابع هایی که خودتان برای مرتب سازی تعریف کرده اید، استفاده نمایید. خوشبختانه برای این موضوع، زبان PHP امکانات بسیاری را فراهم کرده است.
برای این کار، اولین و ساده ترین تابع که می توانید استفاده کنید، usort می باشد. توابع مختلف از این دست مثل uasort و همین طور uksort ، این قابلیت را دارند که به عنوان پارامتر، یک تابع سفارشی به آن پاس داده شود.
این تابع سفارشی، عملا کار سفارشی سازی عملیات سورت بر روی داده های ما را انجام خواهد داد.
اول اسم این تابع ها یعنی حرف u، بیانگر کلمه «User-defined» می باشد. در ادامه به معرفی این توابع می پردازیم.
/*Simple usort with */ $msn_usort_number = [ 4, 8, 3, 6, 2 ]; function msn_usort_for_number( $a, $b ) { if ( $a == $b ) { return 0; } echo "a: $a & b: $b <br>"; return ( $a < $b ) ? - 1 : 1; } usort( $msn_usort_number, 'msn_usort_for_number' ); var_dump( $msn_usort_number ); /*User define sort by string length with usort in DESC mode*/ $animals = [ 'dog', 'tiger', 'giraffe', 'bear' ]; usort( $animals, function ( $a, $b ) { return strlen( $b ) - strlen( $a ); } ); var_dump( $animals ); //The return is: a: 4 & b: 8 a: 8 & b: 3 a: 4 & b: 3 a: 8 & b: 6 a: 4 & b: 6 a: 8 & b: 2 a: 6 & b: 2 a: 4 & b: 2 a: 3 & b: 2 array (size=5) ۰ => int 2 ۱ => int 3 ۲ => int 4 ۳ => int 6 ۴ => int 8 array (size=4) ۰ => string 'giraffe' (length=7) ۱ => string 'tiger' (length=5) ۲ => string 'bear' (length=4) ۳ => string 'dog' (length=3)
$msn_score = [ 'math' => 18.5, 'physics' => 14.25, 'history' => 16, 'sport' => 20, 'jeopardy' => 16 ]; function msn_uasort_for_score( $x, $y ) { if ( $x == $y ) { return 0; } return ( $x < $y ) ? - 1 : 1; } uasort( $msn_score, 'msn_uasort_for_score' ); var_dump( $msn_score ); uksort( $msn_score, 'msn_uasort_for_score' ); var_dump( $msn_score ); //The return is: array (size=5) 'physics' => float 14.25 'history' => int 16 'jeopardy' => int 16 'math' => float 18.5 'sport' => int 20 array (size=5) 'history' => int 16 'jeopardy' => int 16 'math' => float 18.5 'physics' => float 14.25 'sport' => int 20
// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS $obj = new stdClass; $obj->created = '2019-09-06'; $obj->rating = '28'; $arr[0] = $obj; $obj = new stdClass; $obj->created = '2019-09-06'; $obj->rating = '42'; $arr[1] = $obj; $obj = new stdClass; $obj->created = '2019-09-08'; $obj->rating = '23'; $arr[3] = $obj; $obj = new stdClass; $obj->created = '2019-09-09'; $obj->rating = '25'; $arr[4] = $obj; $obj = new stdClass; $obj->created = '2019-09-11'; $obj->rating = '23'; $arr[6] = $obj; $obj = new stdClass; $obj->created = '2019-09-07'; $obj->rating = '20'; $arr[7] = $obj; $obj = new stdClass; $obj->created = '2019-09-10'; $obj->rating = '45'; $arr[10] = $obj; // A FUNCTION TO COMPARE created PROPERTIES function sort_created_asc( $a, $b ) { return ( $a->created < $b->created ) ? - 1 : 1; } // SORT BY created PROPERTY usort( $arr, 'sort_created_asc' ); echo PHP_EOL . "SORTED BY created: " . PHP_EOL; var_dump( $arr ); //The return is: array (size=7) ۰ => object(stdClass)[2] public 'created' => string '2019-09-06' (length=10) public 'rating' => string '42' (length=2) ۱ => object(stdClass)[1] public 'created' => string '2019-09-06' (length=10) public 'rating' => string '28' (length=2) ۲ => object(stdClass)[6] public 'created' => string '2019-09-07' (length=10) public 'rating' => string '20' (length=2) ۳ => object(stdClass)[3] public 'created' => string '2019-09-08' (length=10) public 'rating' => string '23' (length=2) ۴ => object(stdClass)[4] public 'created' => string '2019-09-09' (length=10) public 'rating' => string '25' (length=2) ۵ => object(stdClass)[7] public 'created' => string '2019-09-10' (length=10) public 'rating' => string '45' (length=2) ۶ => object(stdClass)[5] public 'created' => string '2019-09-11' (length=10) public 'rating' => string '23' (length=2)
مرتب سازی چندگانه آرایه با استفاده از array_multisort
یکی دیگر از توابع بسیار کاربردی برای استفاده بر روی آرایه ها، تابع array_multisort می باشد. با استفاده از این تابع ما می توانیم مرتب سازی های مختلف بر روی یک آرایه یا چندین آرایه داشته باشیم.
خروجی تابع array_multisort یک آرایه مرتب شده است. شما می توانید یک یا چندین آرایه به این تابع assign کنید. این تابع ابتدا آرایه اول را بر اساس ترتیب مرتب سازی (صعودی یا نزولی) و همین طور نوع مرتب سازی، مرتب می نماید.
سپس به سراغ آرایه دوم رفته و همین کار را تا انتها برای سایر آرایه ها نیز انجام می دهد. پارامتر هایی که به همراه هر آرایه می توان به آن اختصاص داد، شامل sortorder و همین طور sorttype می باشد.
در زیر یک چندین مثال ساده برای درک بهتر نحوه کار این تابع آورده شده است:
/*Sort multi-dimensional array*/ $animal_array = [ "Dog", "Dog", "Cat" ]; $animal_name_array = [ "Pluto", "Fido", "Missy" ]; // sorting multiple arrays array_multisort( $animal_array, SORT_ASC, $animal_name_array, SORT_DESC ); var_dump( $animal_array ); var_dump( $animal_name_array ); $multi_dimensional = [ [ "۱۰", ۱۱, ۱۰۰, ۱۰۰, "a" ], [ ۱, ۲, "۲", ۳, ۱ ], ]; array_multisort( $multi_dimensional[0], SORT_ASC, SORT_STRING, $multi_dimensional[1], SORT_NUMERIC, SORT_DESC ); var_dump( $multi_dimensional ); /* * https://php.net/manual/en/function.array-multisort.php * */ /*Based on natural sort*/ $multi_dimensional = [ [ "۱۰", ۱۱, ۱۰۰, ۱۰۰, "a" ], [ ۱, ۲, "۲", ۳, ۱ ], ]; array_multisort( $multi_dimensional[0], SORT_NATURAL, $multi_dimensional[1], SORT_NUMERIC, SORT_DESC ); var_dump( $multi_dimensional ); /*If you need to sort insensitive, you can use from that*/ $sort_by_flag_case = [ [ 'Mehdi', 'ghazanfar', 'mehdi', 'Gholam' ], [ 'Soltani', 'ghazanfari', 'soltani', 'Gholami' ], ]; array_multisort( $sort_by_flag_case[1], SORT_FLAG_CASE | SORT_NATURAL ); var_dump( $sort_by_flag_case ); //The return is: array (size=3) ۰ => string 'Cat' (length=3) ۱ => string 'Dog' (length=3) ۲ => string 'Dog' (length=3) array (size=3) ۰ => string 'Missy' (length=5) ۱ => string 'Pluto' (length=5) ۲ => string 'Fido' (length=4) array (size=2) ۰ => array (size=5) ۰ => string '10' (length=2) ۱ => int 100 ۲ => int 100 ۳ => int 11 ۴ => string 'a' (length=1) ۱ => array (size=5) ۰ => int 1 ۱ => int 3 ۲ => string '2' (length=1) ۳ => int 2 ۴ => int 1 array (size=2) ۰ => array (size=5) ۰ => string '10' (length=2) ۱ => int 11 ۲ => int 100 ۳ => int 100 ۴ => string 'a' (length=1) ۱ => array (size=5) ۰ => int 1 ۱ => int 2 ۲ => int 3 ۳ => string '2' (length=1) ۴ => int 1 array (size=2) ۰ => array (size=4) ۰ => string 'Mehdi' (length=5) ۱ => string 'ghazanfar' (length=9) ۲ => string 'mehdi' (length=5) ۳ => string 'Gholam' (length=6) ۱ => array (size=4) ۰ => string 'ghazanfari' (length=10) ۱ => string 'Gholami' (length=7) ۲ => string 'Soltani' (length=7) ۳ => string 'soltani' (length=7)
بعضی سوالات متداول در مورد آرایه ها
در بخش زیر بعضی از سوالات رایج در مورد آرایه ها که مورد سوال دوستان می باشد، قرار داده شده است. امیدوارم که این بخش نیز به کار دوستان بیاید:
در زیر یک چندین مثال ساده برای درک بهتر نحوه کار این تابع آورده شده است:
$temp_array = ['vahid@','neda','saeed@','fatemeh','nafiseh','gholam@']; $result = []; foreach ($temp_array as $item) { if (1 === preg_match('/@$/', $item)) { $result[] = $item; } } var_dump($result); //The result is something like this: array (size=3) ۰ => string 'vahid@' (length=6) ۱ => string 'saeed@' (length=6) ۲ => string 'gholam@' (length=7)
نتیجه گیری برای آموزش کار با آرایه های PHP
در این سری از آموزش های PHP ،با آموزش استفاده از آرایه در PHP در خدمت شما دوستان عزیز بودیم. در ابتدا در مورد اینکه آرایه در PHP چیست و چه کاربردی دارد، صحبت کردیم.
پس از آن به نحوه تعریف و نمایش عناصر آرایه در PHP اشاره کردیم. سپس انواع آرایه ها در PHP را مورد بررسی قرار داریم. در ادامه در مورد دسترسی به عناصر آرایه و مقدار دهی به آن صحبت کردیم.
سپس نحوه پیمایش آرایه در PHP را بیان کردیم و در ادامه نیز با روش های مرتب سازی آرایه های PHP آشنا شدیم. در ادامه مرتب سازی سفارشی آرایه را نیز مورد بررسی قرار دادیم.
درانتها نیز، با مفهوم مرتب سازی چندگانه بر روی یک یا چندین آرایه آشنا شدیم.
ممکن است شما با موارد بیشتری در این حوزه آشنا باشید، که ما فراموش کرده ایم تا آن ها را در این مقاله قرار دهیم.
اگر شما از این موارد آگاه هستید، حتما در بخش نظرات عنوان کنید تا آن را به مقاله “آموزش کار با آرایه در PHP” اضافه کنیم. در ضمن اگر این مقاله را مفید دیدید، حتما آن را به دوستان خود معرفی کرده یا در شبکه های اجتماعی به اشتراک بگذارید.
راهنما برای مطالعه بیشتر:
برای تولید مقاله انواع عملگرها در PHP ، از لینک های زیر استفاده شده است که برای مطالعه بیشتر، می توانید به آن ها مراجعه کنید:
راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:
شما می توانید از طریق لینک های کاربردی زیر به سایر مقالات سایت که کاملا بصورت طبقه بندی شده وجود دارد، مراجعه نموده و از آن ها استفاده کنید:
سلام وقت تون بخیر ببخشید یه سوال داشتم اگر یه آرایه داشته باشیم و یه متغیر داشته باشیم و بعد بخوایم به تعداد اون متغیر از اول آرایه جدا کنیم و به آخر آرایه اضافه کنیم.از چه روشی باید استفاده کنیم؟
سلام به شما دوست عزیز
ببخشید بابت اینکه دیر پاسخ دادم.
منظور از متغیر، چه متغیری هست؟ آیا یک متغیر عددی هست و قرار هست به تعداد آن به انتهای آرایه خانه خالی اضافه شود؟ یا این که خود متغیر، یک آرایه هست و قرار است اعضای آن به انتهای آرایه مد نظر اضافه شوند؟
سلام و درود بزرگوار
چه دستوری باید بنویسیم تا فقط مقدار های خاصی از ارایه بتونیم نمایش بدیم.
مثلا یک ارایه ۶ خونه ای داریم به این صورت:
۰=> vahhhid@
۱=> 1nedasa
۲=> saaaeid@
۳=> fatim
۴=> nafiuu
۵=> asdhkdj@
من میخوام فقط خونه هایی که اخر رشته هاشون کاراکتر @ داره را بتونم خروجی بگیرم یا چاپ کنم
خیلی ممنون میشم راهنمایی کنید به شدت احتیاج دارم
سلام به شما دوست عزیز
برای حل باید از regular expression در php استفاده کنید. چون سوال خوبی بود، اون رو به مقاله اضافه کردم و راه حلش رو در زیر اون آوردم.
می تونید از این لینک برای دسترسی به اون استفاده کنید. قبل از بخش نتیجه گیری و در بخش سوالات متداول اون رو قرار دادم.
امیدوارم که مشکل شما رو حل کرده باشه.
سپاسگزارم