2011-06-04 10 views
12

क्या सरणी को दो सरणी में विभाजित करने का कोई आसान तरीका है, जिसमें सभी चाबियाँ शामिल हैं और अन्य सभी मूल्य शामिल हैं? यह array_combine की क्रिया के विपरीत होगा। क्या ऐसा कोई काम करने के लिए कोई अंतर्निहित कार्य है? एक उदाहरण सरणी का उपयोग करते हैं:PHP दो एरे में एक ऐरे को विभाजित करना - चाबियाँ सरणी और मान सरणी

$array = array('Tiger' => 'Forest', 'Hippo' => 'River', 'Bird' => 'Sky'); 

वहाँ एक समारोह है कि में ऊपर सरणी विभाजित कर देगा है:

$keys = array_keys($array); 
$values = array_values($array); 

तुम भी कर सकते हैं:

$array_keys = array('Tiger', 'Hippo', 'Bird'); 
$array_values = array('Forest', 'River', 'Sky'); 
+0

कार्यों को देखा, उनका इस्तेमाल किया और वे काम करते हैं। तो बाकी सभी सही हैं। मुझे लगता है, मैं PHP मैनुअल या किसी संदर्भ पुस्तक के साथ समय बिताना होगा।आप सभी को बहुत बहुत धन्यवाद। – Bululu

उत्तर

27

दो कार्य array_keys और array_values कहा जाता है के होते हैं:

$array_keys = array_keys($array); 
$array_values = array_values($array); 
+4

लेकिन क्या यह अलग होने के बाद कुंजी और मानों के बीच बिल्कुल वही आदेश होगा? किसी भी स्रोत सरणी के लिए? –

+0

मुझे विश्वास है। Array_values ​​के लिए php दस्तावेज स्पष्ट रूप से बताता है '* array_values ​​() सरणी से सभी मान देता है और सरणी संख्यात्मक रूप से * को अनुक्रमणित करता है। 28/12/2017 तक मुझे array_keys के लिए ऐसा स्पष्ट कथन नहीं मिला। हालांकि, उपयोगकर्ता ने PHP वेबसाइट पर सहायता टेक्स्ट के बाद नोट्स का योगदान दिया, तत्व की स्थिति प्राप्त करने के लिए array_keys का दो बार उपयोग किया जाता है (* tana dot it * द्वारा vesely द्वारा योगदान) का अर्थ है कि array_keys उसी तत्व में महत्वपूर्ण तत्व देता है array_values। – KolaB

6

वास्तव में दो कार्य कर रहे हैं सटीक विपरीत:

$array = array_combine($keys, $values); 
1

आश्चर्यजनक रूप से पर्याप्त, जिन कार्यों को आप ढूंढ रहे हैं उन्हें array_keys() और array_values() कहा जाता है।

$keys = array_keys($array); 
$vals = array_values($array); 
1

दुर्भाग्य है array_combine का कोई अंतर्निहित उलटा। एक को परिभाषित करने का कोई तरीका नहीं है, क्योंकि array_combine एकाधिक पैरामीटर की अपेक्षा करता है और हम फ़ंक्शन से कई मान वापस नहीं कर सकते हैं।

हम array_combine के लिए एक विकल्प बना सकते हैं जो एक भी तर्क लेता है: कुंजी की सरणी और अन्य सरणी में एक साथ लपेटकर मानों की सरणी। यह परिवर्तन कहा जाता है "uncurrying" और "call_user_func_array" समारोह द्वारा किया जाता है:

$array_comb = function($arr) { return call_user_func_array('array_combine', $arr); }; 

यह वैकल्पिक समारोह एक व्युत्क्रम है:

$compose = function($f, $g) { 
    return function($x) use ($f, $g) { return $f($g($x)); }; 
}; 
: यदि हम समारोह रचना को परिभाषित

$array_split = function($arr) { return array(array_keys($arr), array_values($arr)); }; 

फिर निम्न कार्य सभी (विस्तारित) बराबर हैं, यानी। वे सब उनके तर्क में कोई बदलाव नहीं लौटने:

$identity  = function($x) { return $x; }; 
$left_inverse = $compose($array_split, $array_comb); // Split then combine 
$right_inverse = $compose($array_comb, $array_split); // Combine then split 

ध्यान दें कि वे अलग अलग तर्क प्रकारों हालांकि स्वीकार करते हैं:

  • $ पहचान कुछ भी पर काम करेंगे।
  • $ left_inverse किसी भी सरणी पर काम करेगा।
  • $ right_inverse arrays-of-arrays पर काम करेगा, जहां बाहरी सरणी में 2 तत्व होते हैं, दोनों आंतरिक सरणी बराबर लंबाई के होते हैं और पहले आंतरिक सरणी में केवल पूर्णांक और तार होते हैं।
0
function array_split($data) 
{ 
    $x = 0;//Counter to ensure accuracy 
    $retArray[0] = array();//Array of Keys 
    $retArray[1] = array();//Array of Values 

    foreach($data as $key => $value) 
    { 
    $retArray[0][$x] = $key; 
    $retArray[1][$x] = $value; 
    $x++; 
    } 

    RETURN $retArray; 
} 

$data = array("key" => "value", "key2" => "value2"); 

$splitData = array_split($data); 

//print_r($splitData[0]);//Output: Array ([0] => key [1] => key2) 
//print_r($splitData[1]);//Output: Array ([0] => value [1] => value2) 

print_r($splitData); 
//Output: 
/* 
Array 
(
    [0] => Array 
     (
      [0] => key 
      [1] => key2 
     ) 

    [1] => Array 
     (
      [0] => value 
      [1] => value2 
     ) 

) 
*/ 
+0

आपको केवल कोड चिपकाने के बजाय अपने उत्तर की व्याख्या करनी चाहिए –

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