অ্যারে থেকে কোয়েরি স্ট্রিং তৈরি করতে পিএইচপি ফাংশন


165

আমি কী মান জোড়ার অ্যারে থেকে ক্যোরি স্ট্রিং তৈরি করতে পিএইচপি ফাংশনের নাম খুঁজছি। দয়া করে নোট করুন, আমি এটি করার জন্য বিল্ট ইন পিএইচপি ফাংশনটি খুঁজছি , হোমব্রিউ নয় ( এটিই গুগল অনুসন্ধানে ফিরে আসবে বলে মনে হচ্ছে)। একটি আছে, আমি কেবল তার নামটি মনে করতে পারছি না বা php.net এ এটি খুঁজে পাচ্ছি না। আইআইআরসি এর নামটি তেমন স্বজ্ঞাত নয়।

উত্তর:


312

তুমি খুঁজছ http_build_query()


এটি একটি সম্পূর্ণ নতুন ফাংশন, পিএইচপি 5 থেকে উপলব্ধ
কলমারিয়াস

15
এই ফাংশন দিয়ে সাবধান! এটি মানটি যে কোনও মূল-জুটি বাদ দেবে। echo http_build_query(array("foo"=>"bar","bar"=>null))কেবল উত্পাদন করবেfoo=bar
সিবি 0

@ সিবি0 এটি ব্রাউজারে জমা দেওয়ার অনুরূপ কাজ করে, একটি খালি ইনপুট ক্ষেত্র জমা দেওয়া ক্যোয়ারিতে অন্তর্ভুক্ত করা হবে না।
টিজে এল

1
@ সিজেজোজ আচ্ছা আপনি এটাকে দীর্ঘকাল ধরে চেনেন ... আপনার ইচ্ছা সত্য হয়েছে?
অ্যান্ড্রু

21

এখানে একটি সহজ php4- বান্ধব বাস্তবায়ন:

/**
* Builds an http query string.
* @param array $query  // of key value pairs to be used in the query
* @return string       // http query string.
**/
function build_http_query( $query ){

    $query_array = array();

    foreach( $query as $key => $key_value ){

        $query_array[] = urlencode( $key ) . '=' . urlencode( $key_value );

    }

    return implode( '&', $query_array );

}

30
এটি একটি php4 সংস্করণ।
0x6A75616E

1
এর ডিকোডিংটি করার সময়, পিএইচপি কীটিও শতাংশ-ডিকোডে উপস্থিত হয়। এখানে এখানে কি সম্ভবত মূল্যবান?
ক্লাউডফিট

@ ক্লাউডফিট এটি করা যুক্তিসঙ্গত বলে মনে হচ্ছে। এটা ইশারা জন্য ধন্যবাদ।
0x6A75616E

2

ঠিক যেমন @thatjuanএর উত্তর যোগ।
এর আরও সামঞ্জস্যপূর্ণ পিএইচপি 4 সংস্করণ:

if (!function_exists('http_build_query')) {
    if (!defined('PHP_QUERY_RFC1738')) {
        define('PHP_QUERY_RFC1738', 1);
    }
    if (!defined('PHP_QUERY_RFC3986')) {
        define('PHP_QUERY_RFC3986', 2);
    }
    function http_build_query($query_data, $numeric_prefix = '', $arg_separator = '&', $enc_type = PHP_QUERY_RFC1738)
    {
        $data = array();
        foreach ($query_data as $key => $value) {
            if (is_numeric($key)) {
                $key = $numeric_prefix . $key;
            }
            if (is_scalar($value)) {
                $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($key) : rawurlencode($key);
                $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($value) : rawurlencode($value);
                $data[] = "$k=$v";
            } else {
                foreach ($value as $sub_k => $val) {
                    $k = "$key[$sub_k]";
                    $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($k) : rawurlencode($k);
                    $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($val) : rawurlencode($val);
                    $data[] = "$k=$v";
                }
            }
        }
        return implode($arg_separator, $data);
    }
}

-2

যেহেতু এই প্রশ্নটি বেশ পুরানো এবং পিএইচপি-র জন্য, এখানে (বর্তমানে) খুব জনপ্রিয় পিএইচপি ফ্রেমওয়ার্ক লারাভেলে এটি করার একটি উপায়।

আপনার অ্যাপ্লিকেশনটিতে কোনও পাথের জন্য ক্যোয়ারী স্ট্রিংটি এনকোড করতে আপনার রুটের নাম দিন এবং তারপরে সহায়ক ফাংশনটি ব্যবহার করুনroute() :

route('documents.list.', ['foo' => 'bar']);

ফলাফলটি এমন কিছু দেখবে:

http://localhost/documents/list?foo=bar

এছাড়াও সচেতন হন যে যদি আপনার রুটে কোনও পাথ সেগমেন্টের প্যারামিটার থাকে যেমন /documents/{id}, তবে নিশ্চিত করুন যে আপনি প্যারামিটারগুলিতেও একটি idযুক্তি পাস route()করেছেন, অন্যথায় এটি প্রথম প্যারামিটারটির মান ব্যবহার করে ডিফল্ট হবে।


-3

ইমপ্লোড আপনার জন্য একটি স্ট্রিতে একটি অ্যারের একত্রিত করবে, তবে একটি এসকিউএল কোয়েরি তৈরি করতে একটি কে / মান জুটি তৈরি করতে আপনাকে নিজের ফাংশন লিখতে হবে।


চেষ্টা করেছিলাম কিন্তু কাজ করে না। আমি একটি http ক্যোয়ারী স্ট্রিং তৈরির চেষ্টা করছি যার জন্য অ্যারের থেকে কী এবং মান উভয়ই দরকার, ইমপ্লোড এটি করতে পারে না।
রবিন বার্নস

2
আমি দেখতে পাচ্ছি, আপনি কোনও এসকিউএল ক্যোয়ারী স্ট্রিং বা কোনও HTTP ক্যোয়ারী স্ট্রিং বোঝাতে চাইছেন কিনা তা নিশ্চিত ছিল না।
21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.