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

۱ ماه پیش(به روز شده در ۳ هفته پیش) پی اچ پی(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
        )
)

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

ایجاد دایرکتوری های تو در تو(گسترش تابع mkdir)...

تابع پیشفرض mkdir جهت ایجاد دایرکتوری یا پوشه بکار می رود اما در صورتی که بخواهیم دایرکتوری تو در تو ایجاد کنیم این تابع کاربرد نخواهد داشت یعنی......

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

تابع ()subsets زیر مجموعه های یک مجموعه را بر می گرداند. روش کار الگوریتم بسیار ساده است. ابتدا با توجه به آرایه ورودی تعداد اعضای آرایه را بدست می آوریم و سپس 2 را بتوان آن عدد می رسانیم. در واقع یک ...

جدا سازی کلمات یک رشته با توجه به کاراکترهای جدا کننده(گسترش تابع explode)...

تابع explode جهت جدا سازی یک رشته با توجه به کاراکتر ورودی کاربرد دارد. جهت جداسازی یک رشته با چند کاراکتر راه های محتلفی وجود دارد که ما در این بخش این تابع را برای مقصود خود بسط داده ایم. به کدهای ز...

ترجمه اعداد به رشته کوتاه...

گاهی لازم است عددهای بزرگ را خلاصه و یا به اصطلاح ترجمه کرد. ما به عمد تمام جزییات را به دلیل حق انحصار برنامه نویس درج کرده ایم (به مثال آخر نوشته دقت شود). توجه شود که هر چه مقدار متغیر index$ بیشتر...

نظر

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