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

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

تابع تبدیل حجم فایل به فرمتهای مختلف...

تابع زیر حجم فایل را بررسی نموده و با توجه به اندازه آن , حجم را با فرمت مناسب نمایش می دهد. function formatFileSize( $size ) { $file_size = $size; $i = 0;   $name = array( 'byte', 'kB',...

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

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

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

با استفاده از تابع زیر می توانید حجم فایل سایز ورودی که می تواند به همراه فرمت باشد را به بایت بدست آورید. بعنوان مثال شما می توانید حداکثر حجم فایل برای آپلود که در php.ini تنظیم شده است را به بایت ب...

تشخیص حجم فایل با استفاده از فرمت ورودی...

این تابع حجم فایل را گرفته و سپس با توجه به فرمت مشخص شده خروجی را مشخص خواهد کرد. آرگومان‌های ورودی کاملا واضح هستند اما باید گفت که مقدار precision$ قسمت اعشار خروجی را مشخص می کند که به طور پی...

نظر

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