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

۱ سال پیش(به روز شده در ۱۲ ماه پیش) پی اچ پی(PHP)(توابع) ۰

مدتی قبل برای گروه ما در یکی از پروژه ها به تابعی نیاز شد که هر چند جز کدهای ساده ایست اما کارهای بزرگی انجام میدهد. تابع زیر تمامی زیرمجموعه های یک شناسه بصورت تو در تو رو را شناسایی میکند. برای درک بهتر فرض کنید آرایه ای به شکل زیر دارید:

$arr = array(
 1 => null,
 2 => 1,
 3 => 2,
 4 => 3,
 5 => 3);

و میخواهید تمام زیرمجموع های وابسته به مثلا شناسه 1 را پیدا کنید یعنی در آرایه بالا ما به دنبال نتیجه زیر هستیم: 

1 -> 2, 3, 4, 5
2 -> 3, 4, 5
3 -> 4, 5
4 -> 
5 ->

 تابع زیر دقیقا درخواست ما را پاسخ میدهد. این مثال ساده ای بود و مثلا میتوان تمامی زیرمجموعه های یک کاربر تا تو در تو ترین حالت را بدست آورد. یعنی تابع را به مراحل بالاتری بسط داد.

function allSubsets($arr) {
    $result = array();
 
    foreach ($arr as $key => $value) {
        if ($value) {
            $result[$value][] = $key;
            $tmpResult = $result;
            foreach ($tmpResult as $index => $list) {
                if ($index >= $key) {
                    break;
                }
 
                foreach ($list as $i => $j) {
                    if ($value == $j) {
                        $result[$index][] = $key;
                    }
                }
            }
        }
    }
 
    return $result;
}

مثال:

$arr = array(
    1 => null,
    2 => 1,
    3 => 2,
    4 => 3,
    5 => 3);
 
print_r(allSubsets($arr));

نتیجه:

Array
(
    [1] => Array
        (
            [0] => 2
            [1] => 3
            [2] => 4
            [3] => 5
        )

    [2] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
        )

    [3] => Array
        (
            [0] => 4
            [1] => 5
        )
)

صفحات پیشنهادی

توابع next , prev , end , current , reset در php...

این توابع مرتبط با آرایه ها هستند و وظیفه آنها اشاره به مقادیر آنهاست. در آرایه هایی که اندیسها یا کلیدهای آنها غیر عددی است , دسترسی به مقدار کمی متفاوت تر خواهد بود. هر چند که این توابع برای اندیسها...

ایجاد دایرکتوری در صورت نبود آن...

تابع زیر در صورت نبود دایرکتوری آنرا ایجاد می‌نماید. function createDir( $dir ) { if ( !is_dir( $dir ) ) { mkdir( $dir, 0777 ); return true; } return false; }...

محاسبه مقدار حافظه مصرف شده در RAM سیستم(سرور)...

با استفاده از تابع ()memory_usage براحتی میتوانید به مقدار حافظه مصرفی از RAM آگاهی یابید. این تابع از تابع اصلی()memory_get_usage استفاده می کند. function memory_usage() { return (int)(m...

مشخص کردن کبیسه بودن سال در حالت شمسی و میلادی...

در کد زیر, تابع gLeapYear کبیسه بودن سال میلادی و sLeapYear کبیسه بودن سال شمسی را مشخص می کند. function gLeapYear($year) { if (($year % 4 == 0) and (($year % 100 != 0) or ($year % 400 == 0))) ...

نظر

نظری ثبت نشده است.
captcha image reload