روش های جدید کار با آرایه ها


ارسال در تاریخ ۲۳ مهر,۱۳۹۷



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

در این آموزش می خواهیم به برخی تغییرات سینتکس کار با آرایه ها در php 7.1 بپردازیم. این تغییرات مربوط به unpack کردن داده های آرایه ها چه از نوع indexed و چه از نوع associative می باشد.

با مثالی از آرایه های indexed شروع می کنیم:

<?php
$purchases = [
	['T-shirt', '29.95'],
	['Jeans', '69.50'],
	['Sweater', '117.99']
];

echo '<ul>';
foreach ($purchases as $purchase) {
	echo "<li>$purchase[0]: \$$purchase[1]</li>";
}
echo '</ul>';

در این مثال از یک حلقه foreach برای نمایش خانه های یک آرایه indexed در یک لیست نامرتب استفاده کرده ایم. اما استفاده از ایندکس برای نمایش هر خانه از آرایه خوانایی کد را پایین آورده است. کاراکتر بک اسلش قبل از علامت $ برای escape کردن آن و چاپ خود علامت $ است.

اولین راه بالا بردن خوانایی کد، استفاده از لیست در حلقه foreach و نسبت دادن خانه های آرایه به متغیرها هست. خب حلقه foreach بالا را حذف می کنیم و یک حلقه foreach دیگر می نویسیم، ابتدا در پرانتز باز و بسته جلوی foreach نام آرایه را می نویسیم و سپس نوشتن as و پس از آن کلمه list را نوشته و داخل پرانتز متغیرهایی که می خواهیم به خانه های آرایه نسبت دهیم را لیست می کنیم، خب اولین خانه آرایه را item  و دومین خانه را price نام گذاری می کنیم، خب پس از این در بنده حلقه foreach از متغیرهایی که در لیست تعریف کردیم استفاده می کنیم:

$purchases = [
	['T-shirt', '29.95'],
	['Jeans', '69.50'],
	['Sweater', '117.99']
];

echo '<ul>';
foreach ($purchases as list($item, $price)) {
	echo "<li>$item: \$$price</li>";
}
echo '</ul>';

نتیجه پس از اجرا با کد اولی که داشتیم برابر خواهد بود، خب البته فکر می کنم که شما هم موافق باشید که این کد خوانایی بالاتری دارد، برای یادگیری راحت تر است و اگر لازم باشد برای خطایابی نیز ساده تر است. 

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

خب به جای list در اینجا آن را حذف می کنیم و به جای پرانتزها از کاراکتر براکت، سینتکس خلاصه آرایه ها استفاده می کنیم.

<?php
$purchases = [
	['T-shirt', '29.95'],
	['Jeans', '69.50'],
	['Sweater', '117.99']
];

echo '<ul>';
foreach ($purchases as [$item, $price]) {
	echo "<li>$item: \$$price</li>";
}
echo '</ul>';

نتیجه این کد با کد قبلی یکسان خواهد بود، اما باید از php 7.1 یا بالاتر استفاده کنید.

این تغییر کوچکی بود، اما معتقدم که خوانایی کد را بالا برده، خب این روش جدید unpack کردن آرایه های indexed در php 7.1 به بعد بود. اما در مورد آرایه های associative چطور؟ قبل از php 7.1 استفاده از لیست ها در آرایه های associative مجاز نبود، اما حالا این امکان وجود داره که بتوانیم خانه های آرایه های associative را بصورت مستقیم در حلقه foreach به متغیرها در لیست بصورتی که برای آرایه های indexed انجام دادیم نسبت دهیم. 

کد زیر مربوط به آرایه های associative می باشد:

$purchases = [
    ['item' => 'T-shirt', 'price' => '29.95', 'quantity' => 3],
    ['item' => 'Jeans', 'price' => '69.50', 'quantity' => 2],
    ['item' => 'Sweater', 'price' => '117.99', 'quantity' => 1]
];

echo '<ul>';
foreach ($purchases as $purchase) {
    echo '<li>' . $purchase['item'] . ': ' . $purchase['quantity'] . ' @ $' . $purchase['price'] . '</li>';
}
echo '</ul>';

در این مثال هر آرایه داخلی سه المنت یا خانه دارد که با نام های item, price و quantity مشخص شده اند و حلقه foreach این مقادیر را چاپ می کند. این روش استفاده از کلیدها برای چاپ خانه های آرایه در بدنه حلقه foreach هم برای تایپ کردن خسته کننده است و هم مستعد خطا می باشد. اما در php 7.1 به بعد می توانیم از سینتکس آرایه برای نسبت دادن خانه های آرایه به متغیرها استفاده کنیم. هر کدام از کلیدها را توسط اپراتور => به متغیر نسبت می دهیم و البته به خاطر اینکه با آرایه های associative کار می کنیم نیازی به رعایت ترتیب قرار گرفتن کلیدها نداریم. حلقه foreach کد بالا را حذف می کنیم و آن را بصورت زیر می نویسیم:

$purchases = [
    ['item' => 'T-shirt', 'price' => '29.95', 'quantity' => 3],
    ['item' => 'Jeans', 'price' => '69.50', 'quantity' => 2],
    ['item' => 'Sweater', 'price' => '117.99', 'quantity' => 1]
];

echo '<ul>';
foreach ($purchases as ['price' => $price, 'item' => $item]) {
    echo "<li>$item:  \$$price</li>";
}
echo '</ul>';

نتیجه کد بالا با کد قبلی یکی است ولی این خوانایی این کد بالاتر و نوشتن آن نیز راحت تر است. 

در اینجا تمام خانه های آرایه را لیست کردیم، در صورتی که می توانیم تنها کلیدهایی که نیاز داریم را لیست کنیم. مثلا اگر فقط موارد price و item را می خواهیم چاپ کنیم دیگر مقدار quantity را لیست نمی کنیم. 

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

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

در مورد آرایه های associative از عملگر => برای نسبت دادن هر خانه آرایه به متغیرها استفاده می کنیم.  

به خاطر اینکه در آرایه های associative هر خانه آرایه با یک کلید مشخص می شود می توانیم کلید/مقادیر را به هر ترتیبی لیست کنیم و همچنین هر کدام را که بخواهیم لیست کنیم. 


برای ارسال نظر لطفا وارد شوید.