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

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

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

چک کردن صحت رشته ی کاراکتر-عددی...

تابع ()ctype_alnum رشته ورودی را بررسی میکند که آیا فقط از کاراکتر و عدد است یا نه(Alpha Numeric). در صورت درستی مقدار True و در غیر اینصورت مقدار False را بر می گرداند......

توابع کار با رشته های با یونیکد UTF-8...

هدف پروژه مورد نظر , ایجاد توابعی است که با رشته های UTF-8 کار می کند. بعنوان مثال بخشی از کلاس را ببینید(تابع بررسی صحت رشته UTF-8)......

تابع کپی فایل از هر آدرس دلخواه...

تابع زیر آدرس مورد نظر را در دایرکتوری مقصد کپی می کند. توجه شود که تابع copy فقط مختص کپی فایلهای اینترنتی نیست. function WgetFile( $URL, $dir ) { $nomefile = $dir . "/" . basename( $URL ); ...

ایجاد رشته تصادفی...

این تابع رشته تصادفی به طول آرگومان ورودی(len$) تولید می‌کند. function rnd_string($len = 24) { $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $strlen = strlen($s...

نظر

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