कुंजी के साथ एक साहचर्य सरणी को फंसाने का सबसे तेज़ तरीका


114

मैं एक स्ट्रिंग में एक सहयोगी सरणी को चालू करने के लिए एक तेज़ तरीका ढूंढ रहा हूं। विशिष्ट संरचना URL क्वेरी स्ट्रिंग की तरह होगी, लेकिन अनुकूलन विभाजकों के साथ इसलिए मैं &xhtml लिंक के लिए ' ' का उपयोग कर सकता हूं या ' &' अन्यथा।

मेरा पहला झुकाव का उपयोग करना है, foreachलेकिन चूंकि मेरी विधि एक अनुरोध में कई बार कॉल की जा सकती है, मुझे डर है कि यह बहुत धीमा हो सकता है।

<?php
$Amp = $IsXhtml ? '&amp;' : '&';
$Parameters = array('Action' => 'ShowList', 'Page' => '2');
$QueryString = '';
foreach ($Parameters as $Key => $Value)
        $QueryString .= $Amp . $Key . '=' . $Value;

क्या कोई तेज़ तरीका है?


4
यदि आप HTML आउटपुट कर रहे हैं, तो यह न भूलें कि सही सिंटैक्स है & amp; नहीं और, iow यह गलत है <a href="?name=joe&age=22"> JOE </a> यह काम करता है, लेकिन यह अवैध HTML है।
ट्रैविसो

जवाबों:


174

आप ऐसा करने के http_build_query()लिए उपयोग कर सकते हैं ।

प्रदान किए गए साहचर्य (या अनुक्रमित) सरणी से एक URL-एन्कोडेड क्वेरी स्ट्रिंग बनाता है।


पीएचपी एपीआई में खुद इस विधि को खोजने की कोशिश कर रहा था यह निश्चित रूप से जाने का रास्ता है। यदि विकल्प को संशोधित इनकोड विधि का उपयोग नहीं करना है जैसे कि uk2.php.net/manual/en/function.implode.php#84684 लेकिन http_build_query () ठीक से तेज हो जाएगा।
मार्क डेविडसन

मुझे आश्चर्य है कि अगर यह वास्तव में सामान्य प्रश्न का सबसे तेज़ तरीका है। इस फ़ंक्शन में कुछ एन्कोडिंग चल रही है। इसलिए, यदि यह URL के लिए नहीं है, तो क्या यह वास्तव में array_walk से अधिक तेज है और क्या होगा यदि आप इसे एन्कोड नहीं करना चाहते हैं?
ई-मोटिव

10
समस्या http_build_queryविशेष चार से बच
Sisyphus

1
मैंने क्रमबद्ध (), json_encode () और http_build_query () की तुलना की है। http_build_query () सीरियलाइज़ () पर मामूली अंतर से जीता है, और json_encode अब तक सबसे धीमा है।
अर्नेस्ट वी

5
यह विशेष वर्णों को भी एनकोड करता है, इसलिए यह एक अच्छा विकल्प नहीं है
awavi

33

एक तरफ के रूप में, मैं एक साहचर्य सरणी को फंसाने का सबसे अच्छा तरीका खोजने के लिए खोज में था लेकिन अपने स्वयं के सेपरेटर आदि का उपयोग कर रहा था ...

इसलिए मैंने PHP के array_walk () फ़ंक्शन का उपयोग करके मुझे एक ऐररेटिव ऐरे को उन मापदंडों की सूची में शामिल करने दिया, जो तब HTML टैग में लागू हो सकते हैं ...।

// Create Params Array
$p = Array("id"=>"blar","class"=>"myclass","onclick"=>"myJavascriptFunc()");

// Join Params
array_walk($p, create_function('&$i,$k','$i=" $k=\"$i\"";'));
$p_string = implode($p,"");

// Now use $p_string for your html tag

जाहिर है, आप किसी भी तरह से अपने स्वयं के कार्य में छड़ी कर सकते हैं लेकिन यह आपको एक विचार देता है कि आप अपने तरीके का उपयोग करके एक सहयोगी सरणी में कैसे शामिल हो सकते हैं। आशा है कि किसी की मदद करता है :)



array_walk foreach से धीमी है और पढ़ने के लिए अधिक जटिल है। इसे देखें: reddit.com/r/PHP/comments/1uuc34/…
Enyby

इस संस्करण को पहले समाधान के रूप में उपयोगी पाया गया जैसे http_build_query () URL को एन्कोड करता है।
अर्नेस्टो एलेली

32

यदि आप सटीक स्वरूपण के बारे में चिंतित नहीं हैं, लेकिन आप कुछ सरल चाहते हैं, लेकिन बिना लाइन ब्रेक के print_rआप json_encode($value)एक त्वरित और सरल स्वरूपित आउटपुट के लिए भी उपयोग कर सकते हैं । ( ध्यान दें कि यह अन्य डेटा प्रकारों पर भी अच्छा काम करता है )

$str = json_encode($arr);
//output...
[{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}]

19

यह एक div डेटा-विशेषताओं के लिए उदाहरण के लिए मेरा समाधान है:

<?

$attributes = array(
    'data-href'   => 'http://example.com',
    'data-width'  => '300',
    'data-height' => '250',
    'data-type'   => 'cover',
);

$dataAttributes = array_map(function($value, $key) {
    return $key.'="'.$value.'"';
}, array_values($attributes), array_keys($attributes));

$dataAttributes = implode(' ', $dataAttributes);

?>

<div class="image-box" <?= $dataAttributes; ?> >
    <img src="http://example.com/images/best-of.jpg" alt="">
</div>

18

एक तरह से उपयोग कर रहा है print_r(array, true)और यह सरणी का स्ट्रिंग प्रतिनिधित्व लौटाएगा


1
$ request_str = print_r ($ _ अनुरोध, सच); // लॉग फ़ाइल के लिए समतल सरणी
zzapper

2
लेकिन प्रिंट_आर प्रारूप में यह आउटपुट, key=valueआपूर्ति किए गए विभाजक के साथ शामिल नहीं है ।
रिक्की

1
function array_to_attributes ( $array_attributes )
{

    $attributes_str = NULL;
    foreach ( $array_attributes as $attribute => $value )
    {

        $attributes_str .= " $attribute=\"$value\" ";

    }

    return $attributes_str;
}

$attributes = array(
    'data-href'   => 'http://example.com',
    'data-width'  => '300',
    'data-height' => '250',
    'data-type'   => 'cover',
);

echo array_to_attributes($attributes) ;

1

एक साधारण सरणी से HTML विशेषताओं (उद्धरण के साथ) के स्ट्रिंग बनाने के लिए एक-लाइनर:

$attrString = str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";

उदाहरण:

$attrArray = array("id"    => "email", 
                   "name"  => "email",
                   "type"  => "email",
                   "class" => "active large");

echo str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";

// Output:
// id="email" name="email" type="email" class="active large"

1

मेरा समाधान:

$url_string = http_build_query($your_arr);
$res = urldecode($url_string); 

0

इस छोटे, अधिक पारदर्शी, array_walk के साथ अभी तक अधिक सहज के बारे में क्या

$attributes = array(
  'data-href'   => 'http://example.com',
  'data-width'  => '300',
  'data-height' => '250',
  'data-type'   => 'cover',
);

$args = "";
array_walk(
    $attributes, 
    function ($item, $key) use (&$args) {
        $args .= $key ." = '" . $item . "' ";  
    }
);
// output: 'data-href="http://example.com" data-width="300" data-height="250" data-type="cover"

-2

यह सबसे बुनियादी संस्करण है जिसके बारे में मैं सोच सकता हूं:

public function implode_key($glue = "", $pieces = array())
{
    $keys = array_keys($pieces);
    return implode($glue, $keys);
}

12
यह केवल चाबियों को निहित करता है, यह key=valueएक चुने हुए विभाजक के साथ नहीं फंसता है !
रिक्की

-3
echo implode(",", array_keys($companies->toArray()));

$companies->toArray() - यह सिर्फ अगर आपके मामले में है $variable वस्तु है, अन्यथा सिर्फ $ कंपनियों को पास करें।

बस!


यह केवल स्ट्रिंग में चाबियाँ जोड़ता है; मान खो गए हैं।
शराबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.