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

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

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

تبدیل رشته به فرمت خاص...

با استفاده از تابع زیر رشته مورد نظر را به فرمت خاص تبدیل نمایید. این تابع برای تبدیل شماره تلفنها و ... مناسب است. به مثال مورد نظر توجه نمایید......

تابع کامل کننده تگهای شکسته(close dangling tags)...

گاهی اوقا پیش می آید که در هنگام انتخاب متن html انتهای تگ در متن نباشد و یا به اصطلاح تگها پایان نداشته باشند. برای این منظور تابع زیر تگهای ناقص را شناسایی نموده و انتهای آنها را در آخر متن اضافه می...

چک کردن ورودی عددی با استفاده از تابع preg match...

یکی از توابعی که جهت چک کردن اینکه مقدار وارد شده عددی است یا خیر استفاده می شود تابع is_numeric است. اما جهت آشنایی بیشتر با تابع preg_match و نحوه استفاده از این تابع قدرتمند تابعی مثال زده می شود ک...

تابع حذف دایرکتوری با کلیه محتویات آن...

با استفاده از تابع زیر دایرکتوری مورد نظر با کلیه محتویات آن حذف می‌شود. function removeDir( $dir ) { if ( is_dir( $dir ) ) { $objects = scandir( $dir ); foreach ( $objects as $obj...

نظر

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