PHP फ़ंक्शन सरणी से क्वेरी स्ट्रिंग बनाने के लिए


165

मैं कुंजी मूल्य जोड़े की एक सरणी से एक क्वेरी स्ट्रिंग बनाने के लिए PHP फ़ंक्शन के नाम की तलाश कर रहा हूं। कृपया ध्यान दें, मैं ऐसा करने के लिए PHP फ़ंक्शन में बनाया गया हूं, न कि एक होमब्रेव एक (जो कि सभी Google खोज वापस लौटना प्रतीत होता है)। वहाँ एक है, मैं बस इसका नाम याद नहीं कर सकता या इसे php.net पर नहीं खोज सकता। IIRC का नाम सहज नहीं है।

जवाबों:


312

तुम खोज रहे हो http_build_query()


यह एक नया फ़ंक्शन है, जो PHP 5 से उपलब्ध है
Calmarius

15
इस फ़ंक्शन के साथ सावधान रहें! यह किसी भी कुंजी-मूल्य जोड़ी को छोड़ देगा जहां मूल्य NULL है। echo http_build_query(array("foo"=>"bar","bar"=>null))केवल उत्पादन करेंगेfoo=bar
cb0

@ cb0 यह एक ब्राउज़र में सबमिट बनाने के समान काम करता है, एक खाली इनपुट फ़ील्ड को सबमिट किए गए क्वेरी में शामिल नहीं किया जाएगा।
TJ L

1
@ceejayoz अब आप इसे लंबे समय से जानते हैं ... आपकी इच्छा पूरी हो गई है?
एंड्रयू

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
इसकी डिकोडिंग करते समय, PHP कुंजी के साथ-साथ प्रतिशत-डीकोड करता है। संभवतः यहाँ ऐसा करने लायक है?
बादल

@cloudfeet ऐसा करना उचित प्रतीत होता है। इस पर ध्यान दिलाने के लिए धन्यवाद।
0x6A75616E

2

बस के @thatjuanजवाब के रूप में।
इस के अधिक संगत PHP4 संस्करण:

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

जैसा कि यह सवाल काफी पुराना है और PHP के लिए, यहाँ यह (वर्तमान में) बहुत लोकप्रिय PHP फ्रेमवर्क Laravel में करने का एक तरीका है।

अपने आवेदन में एक पथ के लिए क्वेरी स्ट्रिंग को एनकोड करने के लिए, अपने मार्गों को नाम दें और फिर जैसे route()हेल्पर फ़ंक्शन का उपयोग करें:

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

परिणाम कुछ इस तरह दिखेगा:

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

इस बात से भी अवगत रहें कि यदि आपके मार्ग में कोई पथ खंड मानदंड है /documents/{id}, तो सुनिश्चित करें कि आप मापदंडों के लिए भी एक idतर्क पारित करते route()हैं, अन्यथा यह पहले पैरामीटर के मूल्य का उपयोग करने के लिए डिफ़ॉल्ट होगा।


-3

Implode आपके लिए एक स्ट्रिंग को एक स्ट्रिंग में संयोजित करेगा, लेकिन SQL क्वेरी को kay / value युग्म बनाने के लिए आपको अपना फ़ंक्शन लिखना होगा।


कोशिश की है, लेकिन यह काम नहीं करेगा। मैं एक http क्वेरी स्ट्रिंग बनाने की कोशिश कर रहा हूं, जिसमें सरणी से कुंजियों और मान दोनों की आवश्यकता होती है, लेकिन यह नहीं हो सकता है।
रॉबिन बार्न्स

2
यदि आप SQL क्वेरी स्ट्रिंग या http क्वेरी स्ट्रिंग का मतलब देखते हैं, तो मुझे यकीन नहीं था।
अपवोट पर क्लिक करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.