2010-10-10 11 views
20

क्या PHP में बहु-आयामी सरणी को पुनरावर्ती विस्फोट और imploding के लिए कोई फ़ंक्शन हैं?मल्टी आयामी सरणी इम्प्लोड और विस्फोट

+1

मुझे लगता है कि आप लोग बंदूक कूद गए हैं। आपके द्वारा उत्तर के रूप में चिह्नित प्रश्न इस प्रश्न का बिल्कुल सही जवाब नहीं है। आपको उस डुप्ली बटन को मारने से पहले पढ़ना चाहिए। यह इतना मुश्किल नही है। – Jeffz

+1

यह प्रश्न गलत तरीके से [implode-data-from-a-multi-आयामी-array] के डुप्लिकेट के रूप में चिह्नित किए गए हैं (http://stackoverflow.com/questions/16710800/implode-data-from-a-multi-dimensional- सरणी)। यह प्रश्न सामान्य रूप से imploding/विस्फोट के बारे में है जबकि दूसरा एक बहु-आयामी सरणी में एक कुंजी को imploding के बारे में है। –

+0

json_encode/json_decode बहु-आयामी सरणी पैक, अनपैक और स्टोर करने के भी अच्छे तरीके हैं। json_encode '[' foo '=> [' bar '=> 1,' baz '=> [2,3]]] जैसे सरणी को एन्कोड कर सकता है और '{" foo ": {" bar "जैसे स्ट्रिंग को वापस कर देगा: 1, "baz": [2,3]}} '। json_decode फिर जेएसओएन-एन्कोडेड स्ट्रिंग को ऑब्जेक्ट के रूप में वापस कर सकता है। जेएसओएन डेटा जेएसओएन ('stdClass ऑब्जेक्ट ([foo] => stdClass ऑब्जेक्ट ...}') के रूप में PHP से जावास्क्रिप्ट से डेटा पास करते समय आसान होता है। –

उत्तर

43

आप एक पुनरावर्ती समारोह लिख कर ऐसा कर सकते हैं:

function multi_implode($array, $glue) { 
    $ret = ''; 

    foreach ($array as $item) { 
     if (is_array($item)) { 
      $ret .= multi_implode($item, $glue) . $glue; 
     } else { 
      $ret .= $item . $glue; 
     } 
    } 

    $ret = substr($ret, 0, 0-strlen($glue)); 

    return $ret; 
} 

विस्फोट का सवाल है, यह असंभव है जब तक आप स्ट्रिंग के लिए औपचारिक संरचना के कुछ प्रकार, जिस स्थिति में आप क्रमबद्धता के दायरे में हैं देना है , जिसके लिए पहले से मौजूद कार्य मौजूद हैं: serialize, json_encode, http_build_query दूसरों के बीच।

+4

आह! Serialize वह है जो मुझे नहीं पता था कि मुझे जरूरत है! – HyderA

+0

इसे एरे एरे के अंदर केवल कुछ कॉलम फेंकने का कोई तरीका है? इस तरह, लेकिन केवल डीबी क्षेत्रों को मुद्रित करें? –

2

आप सरणी में प्रत्येक मान पर दिए गए फ़ंक्शन को कॉल करने के लिए array_walk_recursive का उपयोग कर सकते हैं। यह फ़ंक्शन कैसा दिखता है वास्तविक डेटा और आप जो करने का प्रयास कर रहे हैं उस पर निर्भर करता है।

2

मैंने दो रिकर्सिव फ़ंक्शन को इंपोड और विस्फोट करने के लिए बनाया है। multi_explode का परिणाम अपेक्षित काम नहीं कर सकता है (मान सभी समान आयाम स्तर पर संग्रहीत हैं)।

function multi_implode(array $glues, array $array){ 
    $out = ""; 
    $g = array_shift($glues); 
    $c = count($array); 
    $i = 0; 
    foreach ($array as $val){ 
     if (is_array($val)){ 
      $out .= multi_implode($glues,$val); 
     } else { 
      $out .= (string)$val; 
     } 
     $i++; 
     if ($i<$c){ 
      $out .= $g; 
     } 
    } 
    return $out; 
} 
function multi_explode(array $delimiter,$string){ 
    $d = array_shift($delimiter); 
    if ($d!=NULL){ 
     $tmp = explode($d,$string); 
     foreach ($tmp as $key => $o){ 
      $out[$key] = multi_explode($delimiter,$o); 
     } 
    } else { 
     return $string; 
    } 
    return $out; 
} 

उन्हें इस्तेमाल करने के लिए:

echo $s = multi_implode(
    array(';',',','-'), 
    array(
     'a', 
     array(10), 
     array(10,20), 
     array(
      10, 
      array('s','t'), 
      array('z','g') 
     ) 
    ) 
); 
$a= multi_explode(array(';',',','-'),$s); 
var_export($a); 
4

मैंने पाया है, तो आप स्वचालित रूप से var_dump की तरह मूल्य मुद्रण के बिना बहु-आयामी सरणी के एक पठनीय स्ट्रिंग प्रतिनिधित्व (विस्फोट) की जरूरत है कि var_export अच्छा है।

http://www.php.net/manual/en/function.var-export.php

संबंधित मुद्दे