نسخه بهتر شده تابع 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

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

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

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

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

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

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

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

تابع تبدیل تاریخ میلادی به شمسی...

تابع تبدیل تاریخ میلادی به شمسی. دو تابع اولیه مربوط مشخص کردن کبیسه بودن سالهای شمسی و میلادی است......

نظر

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