2009-01-02 23 views
93

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

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

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

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

+4

अगर आप HTML आउटपुट कर रहे हैं तो मत भूलें, सही वाक्यविन्यासहै 10 नहीं, और, यह गलत है JOE हाँ यह काम करता है लेकिन यह अवैध HTML है। – TravisO

उत्तर

143

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

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

+0

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

+0

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

+5

समस्या 'http_build_query' से बचें विशेष char – Sisyphus

32

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

तो मैं इस 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 

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

+6

यदि create_function का सिंटैक्स किसी को भ्रमित कर रहा है, तो http://php.net/manual/en/function.create-function.php –

+0

array_walk फोरैच से धीमा है और पढ़ने के लिए अधिक जटिल है। इसे देखें: http://www.reddit.com/r/PHP/comments/1uuc34/quick_test_to_see_if_array_walk_is_better_than/ – Enyby

+0

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

-1

यह सबसे मूल संस्करण मैं के बारे में सोच सकता है: print_r(array, true) उपयोग कर रहा है

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

जो केवल कुंजी को आरोपित करता है, यह किसी चयनित विभाजक के साथ 'key = value' को आरोहित नहीं करता है! – Rikki

16

एक ही रास्ता है और यह सरणी

+1

$ request_str = print_r ($ _ अनुरोध, सत्य); // फ़ाइल फ़ाइल के लिए // flatten सरणी – zzapper

+2

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

22

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

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

यह एक 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> 
0
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) ; 
-3
echo implode(",", array_keys($companies->toArray())); 

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

यही है!

+0

यह केवल स्ट्रिंग को कुंजी जोड़ता है; मूल्य खो गए हैं। – FluffyKitten

0

विशेषताओं 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" 
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"