نسخه بهتر شده تابع parse_str در php

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

در تابع ()parse_str تبدیل آرایه ها بدرستی انجام نمیشود به همین خاطر نیاز هست تا تابع قدرتمندتری استفاده نمود. تابع معرفی شده بصورت کامل یک رشته کوئری ورودی را به متغیرها و آرایه ها تبدیل میکند و به نوعی نسخه پیشرفته تر تابع پیشفرض php است.

function betterParseStr( $string )
{
    return array_reduce( explode( "&", $string ), function( $array, $string_piece ) {
        if( $string_piece === "" ) return $array;
        $equal_offset = strpos( $string_piece, "=" );
        if( $equal_offset === FALSE ) {
            $key = urldecode( $string_piece );
            $value = "";
        } else {
            $key = urldecode( substr( $string_piece, 0, $equal_offset ) );
            $value = urldecode( substr( $string_piece, $equal_offset + 1 ) );
        }
        if( preg_match( "/^([^\[]*)\[([^\]]*)](.*)$/", $key, $matches ) ) {
            $key_path = array( $matches[1], $matches[2] );
            $rest = $matches[3];
            while( preg_match( "/^\[([^\]]*)](.*)$/", $rest, $matches ) ) {
                $key_path[] = $matches[1];
                $rest = $matches[2];
            }
        } else {
            //replace first [ for _
            //why?!? idk ask PHP it does
            //Example: ?key[[=value -> array( "key_[" => "value" )
            $key_path = array( preg_replace('/\[/', '_', $key, 1 ) );
        }
        if( strlen( $key_path[0] ) > 0 && substr( $key_path[0], 0, 1 ) !== "[" ) {
            $current_node = &$array;
            $last_key = array_pop( $key_path );
            $resolve_key = function( $key, array $array ) {
                if( $key === "" || $key === " " ) {
                    $int_array = array_filter( array_keys( $array ), function( $key ) { return is_int( $key ); } );
                    $key = $int_array ? max( $int_array ) + 1 : 0;
                }
                return $key;
            };
            foreach( $key_path as $key_path_piece ) {
                $key_path_piece = $resolve_key( $key_path_piece, $current_node );
                if( ! array_key_exists( $key_path_piece, $current_node ) || ! is_array( $current_node[$key_path_piece] ) ) {
                    $current_node[$key_path_piece] = array();
                }
                $current_node = &$current_node[$key_path_piece];
            }
            $current_node[$resolve_key( $last_key, $current_node )] = $value;
        }
        return $array;
    }, array() );
}

منبع

برچسبها

parsestr php betterParseStr

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

تابع محاسبه کننده شروع و پایان یک روز به زمان یونیکس در php...

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

گرفتن آدرس فعلی صفحه(get page url)...

در PHP بسیاری از اطلاعات سرور در متغیر $_SERVER نگهداری می شود اما به صورت مجزا. ما برای اینکه بتوانیم آدرس کامل صفحه فعلی ای که در جریان است را بدست آوریم باید از این جزییات استفاده کنیم. * لازم به ذ...

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

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

تابع تبدیل تاریخ(TimeStamb) به فرمت دلخواه...

این تابع تاریخ با فرمت TimeStamb را به فرمت دلخواه تبدیل می نماید. function changeTimeStamp( $date, $dateOutput ) { $year = substr( $date, 0, 4 ); $month = substr( $date, 5, 2 ); $day = subst...

نظر

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