مرتب کردن آرایه ها و آشنایی با Superglobal ها

درسنامه درس 12 از سری آموزش PHP 7
مرتب کردن آرایه ها و آشنایی با Superglobal ها

همراهان عزیز روکسو سلام! امروز با بحث جذاب و شیرین مرتب کردن آرایه ها در php با شما هستیم.

ما می توانیم اعضای یک آرایه را به چند روش مرتب کنیم:

  • به ترتیب الفبا (انگلیسی)
  • به ترتیب اعداد
  • صعودی
  • نزولی

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

مرتب کردن صعودی با ()sort

مثال اول: در مثال زیر اعضای آرایه ی cars را بر اساس حروف الفبا و به صورت صعودی مرتب کرده ایم:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);

$clength = count($cars);
for($x = 0; $x < $clength; $x++) {
    echo $cars[$x];
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

مثال دوم: کد زیر اعضای تابع numbers را بر اساس اعداد و به طور صعودی مرتب می کند:

<!DOCTYPE html>
<html>
<body>

<?php
$numbers = array(4, 6, 2, 22, 11);
sort($numbers);

$arrlength = count($numbers);
for($x = 0; $x < $arrlength; $x++) {
    echo $numbers[$x];
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

مرتب کردن نزولی با ()rsort

مثال اول: کد زیر اعضای آرایه ی cars را به صورت نزولی و بر اساس حروف الفبا مرتب می کند:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array("Volvo", "BMW", "Toyota");
rsort($cars);

$clength = count($cars);
for($x = 0; $x < $clength; $x++) {
    echo $cars[$x];
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

مثال دوم: کد زیر اعضای آرایه ی numbers را بر اساس اعداد و به صورت نزولی مرتب می کند:

<!DOCTYPE html>
<html>
<body>

<?php
$numbers = array(4, 6, 2, 22, 11);
rsort($numbers);

$arrlength = count($numbers);
for($x = 0; $x < $arrlength; $x++) {
    echo $numbers[$x];
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

مرتب کردن صعودی/نزولی بر اساس مقدار با ()asort

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

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
asort($age);

foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

اگر بخواهیم این مثال را به صورت نزولی مرتب کنیم از تابع ()arsort استفاده می کنیم:

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
arsort($age);

foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

مرتب کردن صعودی/نزولی بر اساس key با تابع ksort

کد زیر آرایه ی متناظر را بر اساس key های آن و به صورت صعودی مرتب می کند:

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
ksort($age);

foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

حالا اگر بخواهیم این کار را به صورت نزولی انجام دهد از تابع ()krsort استفاده می کنیم:

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
krsort($age);

foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

SuperGlobal ها در زبان PHP

سوپرگلوبال ها متغیرهایی هستند که در PHP 4 معرفی شدند و همیشه در هر Scope ای قابل دسترسی هستند. این متغیرها از پیش در خود زبان PHP تعریف شده اند:

  • GLOBALS$
  • SERVER_$
  • REQUEST_$
  • POST_$
  • GET_$
  • FILES_$
  • ENV_$
  • COOKIE_$
  • SESSION_$

برخی از این سوپرگلوبال ها را در این جلسه توضیح می دهیم اما با بقیه ی آن ها در روند دوره آشنا خواهید شد.

سوپرگلوبال GLOBALS$

این سوپرگلوبال برای دسترسی به متغیر های سراسری (global) استفاده می شود. شما می توانید از طریق این سوپرگلوبال در هر جایی و درون هر تابع یا متدی که خواستید به متغیرهای سراسری دسترسی داشته باشید. نحوه ی کار آن به شکل [GLOBALS[index است به طوری که index همان نام متغیر سراسری خواهد بود. به مثال زیر توجه کنید:

<!DOCTYPE html>
<html>
<body>

<?php 
$x = 75;
$y = 25; 

function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z;
?>

</body>
</html>

مشاهده ی خروجی

همانطور که می بینید از درون تابع به این متغیر دسترسی پیدا کرده ایم!

سوپرگلوبال SERVER_$

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

<!DOCTYPE html>
<html>
<body>

<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>

</body>
</html>

مشاهده ی خروجی

در جدول زیر لیستی از ورودی های SERVER_$ را مشاهده می کنید:

ورودی توضیح
$_SERVER['PHP_SELF'] نام فایل یا اسکریپت فعلی را برمیگرداند.
$_SERVER['GATEWAY_INTERFACE'] نسخه ی CGI مورد استفاده را برمیگرداند.
$_SERVER['SERVER_ADDR'] آدرس IP میزبان را برمیگرداند.
$_SERVER['SERVER_NAME'] نام سرور میزبان را برمیگرداند. (مثلا www.roxo.ir)
$_SERVER['SERVER_SOFTWARE'] اطلاعات سرور را برمیگرداند. (مانند Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL'] نام پروتکل و اطلاعاتی راجع به آن را برمیگرداند. (مانند HTTP/1.1)
$_SERVER['REQUEST_METHOD'] متد درخواست را برمیگرداند. (مانند POST)
$_SERVER['REQUEST_TIME'] timestamp زمان شروع درخواست را برمیگرداند.
$_SERVER['QUERY_STRING'] در صورت وجود رشته ی کوئری آن را برمیگرداند.
$_SERVER['HTTP_ACCEPT'] Accept header مربوط به درخواست فعلی را برمیگرداند.
$_SERVER['HTTP_ACCEPT_CHARSET'] Accept_Charset headerدرخواست فعلی را برمیگرداند (مانند utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST'] Host header درخواست فعلی را برمیگرداند.
$_SERVER['HTTP_REFERER'] URL کامل آدرس فعلی را برمیگرداند (همیشه پشتیبانی نمی شود و قابل اعتماد نیست)
$_SERVER['HTTPS'] آیا HTTP امن است یا خیر؟
$_SERVER['REMOTE_ADDR'] آدرس IP که کاربر از طریق آن متصل شده است را نشان می دهد.
$_SERVER['REMOTE_HOST'] نام میزبان که کاربر از طریق آن متصل شده است را نشان می دهد.
$_SERVER['REMOTE_PORT'] پورت استفاده شده در کامپیوتر کاربر برای اتصال به سایت را نشان می دهد.
$_SERVER['SCRIPT_FILENAME'] آدرس مطلق (absolute) اسکریپت فعلی را برمیگرداند.
$_SERVER['SERVER_ADMIN']  مقدار داده شده به SERVER_ADMIN در فایل پیکربندی سرور را برمیگرداند.
$_SERVER['SERVER_PORT'] پورت استفاده شده در سرور ما را برمیگرداند.
$_SERVER['SERVER_SIGNATURE'] نسخه ی سرور و میزبان مجازی را برمیگرداند.
$_SERVER['PATH_TRANSLATED'] آدرس اسکریپت فعلی را بر اساس آدرس سیستم برمیگرداند.
$_SERVER['SCRIPT_NAME'] آدرس اسکریپت فعلی را برمیگرداند.
$_SERVER['SCRIPT_URI'] آدرس URI صفحه ی فعلی را برمیگرداند.

سوپرگلوبال REQUEST_$

این سوپرگلوبال برای دریافت اطلاعات پس از ثبت یک فرم مورد استفاده قرار می گیرد. در مثال زیر یک فرم می بینید؛ زمانی که کاربر روی دکمه ی ثبت (Submit) کلیک کند، فرم به action مشخص شده ارسال می شود (به صورت attribute در تگ <form> مشخص شده است). در مثال زیر action را همین فایل فرم قرار داده ایم. یعنی همین فایلی که فرم در آن قرار دارد، اطلاعات فرم را پردازش کند. شما می توانید فایل خودتان را مشخص کنید.

<!DOCTYPE html>
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = htmlspecialchars($_REQUEST['fname']); 
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

</body>
</html>

مشاهده ی خروجی

همانطور که می بینید در مثال بالا از متد POST استفاده شده است اما روش دریافت آن آنقدرها مرسوم نیست. روش بهتر برای دریافت نام کاربر به صورت زیر است:

<!DOCTYPE html>
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_POST['fname']; 
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

</body>
</html>

مشاهده ی خروجی

بله مستقیما از POST_$ استفاده کرده ایم اما اگر متدها به صورت GET بود چطور؟ آنگاه می توانیم از GET_$ استفاده کنیم!

GET_$ برای دریافت فرم هایی با متد GET استفاده می شود اما می توان با استفاده از آن هر اطلاعاتی که به صورت پارامتر به URL ارسال شود را نیز دریافت کرد. به مثال زیر توجه کنید:

<!DOCTYPE html>
<html>
<body>

<a href="test_get.php?subject=PHP&web=W3schools.com">Test $GET</a>

</body>
</html>

مشاهده ی خروجی

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (3 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

nahid
26 مرداد 1399
سلام من یک متغیر از نوع آرایه تعریف کردم. میخوام از ایندکس و مقادیر آن در جدول html مرتب سازی و نمایش بدم.چجوری می تونم اینکارو انجام بدم؟ ممنون میشم از پاسختون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

ایمان
27 فروردین 1399
سلام برای سورت کردن آرایه مولتی دایمنشال با مقدار فارسی بر اساس حروف الفبا ، راهکاری دارید؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سینا مرادی
20 مرداد 1398
من اگه بخوام بقیه ی سوپرگلوبال ها رو ببینم چیکار کنم؟ لیستی دارین که بدین؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
21 مرداد 1398
سلام دوست عزیز، سوپرگلوبال ها رو میتونین با یه سرچ ساده از اینترنت پیدا کنین، همه جا هست: $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV برای توضیحات کامل و دیدن مثال های بیشتر هم میتونین به وب سایت رسمی خود PHP سر بزنید: https://www.php.net/manual/en/language.variables.superglobals.php

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.