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

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

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

ایجاد تابعی با n ورودی - mixed arguments...

برای ایجاد تابعی با n ورودی (mixed arguments) کافیست ابتدا آرگومانهای تابع را به صورت یک متغیر آرایهای بگیرید. مثال: function foo() { $args = func_get_args(); print_r($args); }   ...

تابع utf8SubString , گرفتن بخشی از رشته با یونیکد UTF8...

تابع معمولی substr در php برای رشته های یونیکدی جواب نمی دهد. در واقع در رشته های یونیکد دار هر حرف از ترکیب سه یا چهار حرف اسکی که کد اسکی آنها بیشتر از 127 است تشکیل شده است. لذا نیاز است تا برای ای...

شناسایی اعداد از متن یونیکد...

روشهای رایج همگی جهت شناسایی اعداد یک رشته روش زیر را پیشنهاد میکنند......

دو تابع کاربردی برای گرفتن متغیرهای ورودی در دو متد POST و GET...

لزوما در گرفتن متغیرهای ورودی که توسط کاربران ارسال می گردد(فرمها) در دو متد POST و GET می باشد. زمانی که شروع به برنامه نویسی می کنیم بهتر است مادامی که بررسی کنیم آیا متغیر اصلا ارسال شده و اگر نشده...

نظر

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