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

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

گرفتن مقادیر آرایه با کلید خاص(تابع array column)...

تابع array_column مقادیر یک آرایه را با توجه به مقدار یک کلید خاص بر می گرداند....

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

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

تابع بررسی صحت شماره تلفن...

با استفاده از تابع زیر صحت فرمت شماره تلفن بررسی و در صورت صحیح بودن مقدار True را بر می‌گرداند. function is_valid_phone( $phone ) // goal: chek if a phone numbers is valid, according to its syn...

نظر

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