2012-02-28 16 views
5

में पहचानकर्ता के पहले स्तर को हटाएं मुझे लगता है कि यह पहले हो गया है, लेकिन इसका कोई जवाब नहीं मिला। यदि यह पहले से ही उत्तर दिया गया है तो कृपया मुझे एक लिंक के साथ सही दिशा में इंगित करें।सरणी

मेरे पास एक सरणी है जिसे मैं पहचानकर्ता के पहले स्तर को हटाने के लिए नहीं चाहता हूं। मुझे लगता है कि इसके लिए एक समारोह है?

कि यह कैसे है का उदाहरण:

[0] => Array 
     (
      [8] => Röd 
     ) 

[1] => Array 
     (
      [8] => Blå 
     ) 

[2] => Array 
     (
      [6] => Bobo 
     ) 

[3] => Array 
     (
      [8] => Grön 
     ) 

[4] => Array 
     (
      [7] => Sten 
     ) 

[5] => Array 
     (
      [8] => Vit 
     ) 

[6] => Array 
     (
      [7] => Guld 
     ) 

[7] => Array 
     (
      [6] => Lyxig 
     ) 

मैं क्या wan't

[8] => Röd 
[8] => Blå 
[6] => Bobo 
[8] => Grön 
[7] => Sten 
[8] => Vit 
[7] => Guld 
[6] => Lyxig 
+0

मुझे लगता है कि इन ड्रौयड आप देख रहे हैं कर रहे हैं: http://stackoverflow.com/questions/1181691/extract-leaf-nodes-of- बहु-आयामी-सरणी-इन-php – Quasdunk

+0

आप डुप्लिकेट कुंजी के साथ समाप्त हो जाते हैं ... क्या चाबियां "पुनर्निर्मित" हो सकती हैं (1, 2, 3, ...?) –

+0

मेरा उत्तर जांचें जो पहचानकर्ता के पहले स्तर को हटा देगा सरणी और आपको सटीक परिणाम देगा –

उत्तर

0
foreach($array as $key=>$val) { 
    $newarr[$val] = $array[$key][$val]; 
} 

अपरीक्षित!

+2

किसी को यह जोड़ना चाहिए कि उस गणराज्य कुंजी को निश्चित रूप से संभव नहीं है और अधिलेखित हो जाएगा। – Sgoettschkes

12

यहां समस्या पहचानकर्ता के लिए कुंजी को संरक्षित कर रहा है। आपके पास कुछ नाम स्ट्रिंग हैं जिनके पास एक ही कुंजी है (जैसे Blå और Röd)। आपको या तो इन्हें एक सरणी में स्टोर करने की आवश्यकता है या कुंजी खोने के लिए तैयार होना चाहिए। php5.3 साथ

उदाहरण:

$processed = array_map(function($a) { return array_pop($a); }, $arr); 

यह आपको दे देंगे:

[0] => Röd 
[1] => Blå 
[2] => Bobo 
[3] => Grön 
[4] => Sten 
[5] => Vit 
[6] => Guld 
[7] => Lyxig 

यह स्पष्ट हो गया है भीतरी सरणी पर कुंजी संरक्षित किये जाने के कारण वे आईडी किसी तरह का कर रहे हैं की जरूरत है । इसके साथ ही आपको उस अंत संरचना को बदलना होगा जिसके लिए आप जा रहे हैं क्योंकि आपके पास एक ही सरणी में एक ही कुंजी हो सकती है। सबसे सरल संरचना तो हो जाता है:

[8] => Array 
     (
      [0] => Röd, 
      [1] => Blå, 
      [2] => Vit, 
      [3] => Grön 
     ) 

[6] => Array 
     (
      [0] => Bobo, 
      [1] => Lyxig 
     ) 

[7] => Array 
     (
      [0] => Sten, 
      [1] => Guld 
     ) 

इस संरचना प्राप्त करने के लिए एक सरल पाश काम करेगा:

$processed = array(); 
foreach($arr as $subarr) { 
    foreach($subarr as $id => $value) { 
     if(!isset($processed[$id])) { 
     $processed[$id] = array(); 
     } 

     $processed[$id][] = $value; 
    } 
} 
+0

अच्छा समाधान और कैवियत – Luc

+0

का अच्छा स्थान यह वास्तव में साफ समाधान जैसा दिखता है। लेकिन यह काम करने के लिए नहीं मिल सकता है। जैसा कि आप $ arr में बताते हैं सरणी को इनपुट करना। निम्न संदेश प्राप्त करें: array_map() पैरामीटर 1 को वैध कॉलबैक होने की अपेक्षा करता है, पहला सरणी सदस्य वैध वर्ग नाम या ऑब्जेक्ट नहीं है। मैं निम्नलिखित कोड है ' सरणी ( " 8 "=>" विटामिन " ), " 6 "=> सरणी ( " 7 " => "गुल्ड" ) ); $ संसाधित = array_map ($ arrData, \t समारोह ($ क) \t { \t \t वापसी array_pop ($ एक); \t}); print_r ($ संसाधित); ?> ' – Fredrik

+0

क्षमा करें आसपास के तर्कों को फ़्लिप करें :-) मेरा उत्तर अपडेट किया गया। – prodigitalson

0

इस बाहर की जाँच करें यह क्या अपेक्षित परिणाम

<?php 
$arrData = array(
"5" => array 
     (
      "8" => "Vit" 
     ), 

"6" => array 
     (
      "7" => "Guld" 
     ) 
); 
foreach($arrData as $key=>$value): 
    foreach($value as $k=>$v): 
    $data[$k] = implode(',',$arrData[$key]); 
    endforeach; 
endforeach; 


print_r($data); 
?> 
1

इस्तेमाल होता है:

public function remove_level($array) { 
     $result = array(); 
     foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $result = array_merge($result, $value); 
     } 
     } 
     return $result; 
} 

जो मूल सरणी के उसी क्रम में दूसरे स्तर के सरणी मान लौटाएगा। या आप array_walk उपयोग कर सकते हैं

$results = array(); 
    array_walk($array, function($v, $k) use($key, &$val){ 
       array_merge($results, $v); 
    }); 
3

पीएचपी array_column

$new_array = array_column($old_array,0); 

यह $ old_array के भीतर प्रत्येक सरणी के लिए सूचकांक 0 पर मान प्राप्त होगा। सहयोगी सरणी के साथ भी उपयोग कर सकते हैं।

0

कोशिश सूचक ऑपरेटर के साथ सरणी मर्ज करने के लिए:

print_r(array_merge(...$array)); 
+0

कृपया प्रस्तावित उत्तर समस्या को हल करने के तरीके पर एक विवरण जोड़ें। – Billa