در حال بارگزاری ...

مقایسه دو آرایه و محاسبه تفاوت آن‌ها با php

php
توسط مریم مهربان
آخرین به روز رسانی شنبه 16 آذر 1398

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

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


محاسبه تفاوت خانه های آرایه در آرایه های مبتنی بر Index

برای این کار، کتابخانه‌های متفاوتی در جاوا اسکریپت وجود دارد. در این کد، در یک حلقه، تمام مقادیر موجود در آرایه جدید را مرور می‌کنیم. در هر تکرار از این حلقه، مقدار خانه فعلی آرایه جدید را در یک متغیر ذخیره می‌کنیم. سپس، تابع array_search را با این متغیر و آرایه قدیمی‌تر، به عنوان پارامتر، استفاده می‌کنیم تا مشخص شود که آیا این مقدار در آرایه قدیمی‌تر وجود دارد. اگر خروجی تابع array_Search برابر با false باشد، مشخص می‌شود که این مقدار تنها در آرایه جدیدتر وجود دارد. اما در حالتی که این تابع، یک مقدار صحیح بازگرداند، این مقدار برابر با شماره خانه این مقدار در آرایه قدیمی‌تر است.

$oldarray = ['FreeCodeCamp', 'angular.js', 'd3', 'jquery', 'react', 'meteor'];
$newarray = ['jquery', 'VueJS', 'd3', 'meteor', 'FreeCodeCamp', 'angular.js', 'react'];

// start looping through the new array
for ($i = 0; $i < sizeof($newarray); $i++) {

    // get currentiterationvalue
    $currentiterationvalue = $newarray[$i];

    // for each current index value, find the associated old index position
    $oldposition = array_search($currentiterationvalue, $oldarray);

    // if the current index value is not found, it means it is a new entry
    if ($oldposition == false) {
        echo $currentiterationvalue . ' gained ' . abs($i - sizeof($newarray)) . '
';
    } else {
        // otherwise, we find the difference of the value's current position versus
        // it's old position
        $difference = $oldposition - $i;

        // now we just add some logic to echo out if the value gained, lost, or
        // did not change
        if ($difference > 0) {
            echo $currentiterationvalue . ' gained ' . abs($difference) . '
';
        } elseif ($difference < 0) {
            echo $currentiterationvalue . ' lost ' . abs($difference) . '
';
        } else {
            echo $currentiterationvalue . ' did not change' . '
';
        }
    }
}
jquery gained 3
VueJS gained 6
d3 did not change
meteor gained 2
FreeCodeCamp gained 3
angular.js lost 4
react lost 2

محاسبه تفاوت دو آرایه در آرایه های انجمنی

در مورد آرایه‌های انجمنی نیز ‌می‌توان همان الگوریتم بالا را استفاده کرد. اما پیش از این کار، ابتدا باید با فراخوانی تابع array_keys، آرایه انجمنی را به آرایه مبتنی بر Index تبدیل کنیم و سپس می‌توانیم الگوریتم بالا را برای آن استفاده کنیم.

$oldarray = [
    'FreeCodeCamp' => 'one',
    'angular.js' => 'two',
    'd3' => 'three',
    'jquery' => 'four',
    'react' => 'five',
    'meteor' => 'six',
];

$newarray = [
    'jquery' => 'one',
    'VueJS' => 'two',
    'd3' => 'three',
    'meteor' => 'four',
    'FreeCodeCamp' => 'five',
    'angular.js' => 'six',
    'react' => 'seven',
];

$oldarray = array_keys($oldarray);
$newarray = array_keys($newarray);
 for ($i = 0; $i < sizeof($newarray); $i++) {
    $currentiterationvalue = $newarray[$i];
    $oldposition = array_search($currentiterationvalue, $oldarray);
    if ($oldposition == false) {
        echo $currentiterationvalue . ' gained ' . abs($i - sizeof($newarray)) . '
';
    } else {
        $difference = $oldposition - $i;
        if ($difference > 0) {
            echo $currentiterationvalue . ' gained ' . abs($difference) . '
';
        } elseif ($difference < 0) {
            echo $currentiterationvalue . ' lost ' . abs($difference) . '
';
        } else {
            echo $currentiterationvalue . ' did not change' . '
';
        }
    }
}
jquery gained 3
VueJS gained 6
d3 did not change
meteor gained 2
FreeCodeCamp gained 3
angular.js lost 4
react lost 2

مطالعه مقالات بیشتر در لیداوب:

در این آموزش، به دنبال آن بودیم که تفاوت خانه یک مقدار را در دو آرایه محاسبه کنیم و آن را برای دو آرایه مبتنی بر Index و انجمنی انجام دادیم. با سایر مقالات کاربردی لیداوب در زمینه‌های مختلف طراحی سایت و برنامه نویسی با php همراه باشید.

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
ثبت امتیاز
2.5 (2 رای)

   لطفا صبر کنید ...