2010-08-11 13 views
10

PHP Manual के अनुसार, array_map पर NULL कॉलबैक के साथ कॉल करने से यह "ज़िप" फ़ंक्शन निष्पादित करता है, जो दिए गए सरणी से समानांतर तत्वों के सरणी बना देता है।क्या PHP 2 डी सरणी को स्थानांतरित करने का कोई बेहतर तरीका है?

उदाहरण के लिए:

array_map(NULL,array(1,2,3),array('a','b','c')); 

पैदावार

array(array(1,'a'),array(2,'b'),array(3,'c')) 

यह भी अभी सरणी

array(array(1,2,3),array('a','b','c')) 

transposing के बराबर है, ऐसा लगता है यह सबसे करीब तरीका है (बनाया का उपयोग -इन फ़ंक्शंस) आप एक सरणी को ट्रांसफर कर सकते हैं, सिवाय इसके कि array_map एआर की एक सूची लेता है ऐस, सरणी की सरणी नहीं।

कुछ कोड में मैं पर काम कर रहा हूँ, मैं सरणियों की एक सरणी, नहीं सरणियों की एक सूची स्थानांतरित करने के लिए की जरूरत है, तो मैं इस काम के आसपास बनाया:

call_user_func_array('array_map',array_merge(array(NULL),$array_of_arrays)) 

बहरहाल, यह बहुत गंदा और अनाड़ी लगता है ।

और इसलिए मैं पूछता हूं:
क्या कस्टम कार्यान्वयन के अलावा PHP के साथ 2 डी सरणी को स्थानांतरित करने का कोई बेहतर तरीका है?

उत्तर

4

नहीं। यह सबसे सुरुचिपूर्ण है।

2

तुम सच में array_merge से बचने के लिए, array_unshift का उपयोग बजाय $array_of_arrays को शून्य पहले जोड़ें करना चाहते हैं:

array_unshift($array_of_arrays, NULL); 
call_user_func_array('array_map', $array_of_arrays); 

बेशक यह एक अब एक लाइनर नहीं है: पी

+0

और यह बदल '$ array_of_arrays' अगर मैं इसे बाद में उपयोग करने के लिए चाहते हो जाएगा, तो मैं' array_shift करना होगा ($ array_of_arrays) 'बाद में ... –

+0

@ ऑस्टिन हाइड: सच। आप केवल सरणी की एक प्रति बना सकते हैं: '$ array_of_arrays = $ my_arrays_of_arrays' पहले से – user102008

+0

यह केवल तभी काम करता है जब मैट्रिस रैंक> 1 – gurghet

1

अद्यतन के लिए PHP 5.6:

हम इस ऑपरेशन को अधिक बनाने के लिए PHP 5.6 के "स्प्लट" ऑपरेटर का लाभ उठा सकते हैं, तर्क अनपॅकिंग के साथ अधिक क्लीनर:

array_map(null, ...$array_of_arrays); 

उदाहरण के लिए:

[1] boris> $arr2d = [ [1,2,3], ['a','b','c'] ]; 
// array(
// 0 => array(
//  0 => 1, 
//  1 => 2, 
//  2 => 3 
// ), 
// 1 => array(
//  0 => 'a', 
//  1 => 'b', 
//  2 => 'c' 
// ) 
//) 
[2] boris> array_map(null, ...$arr2d); 
// array(
// 0 => array(
//  0 => 1, 
//  1 => 'a' 
// ), 
// 1 => array(
//  0 => 2, 
//  1 => 'b' 
// ), 
// 2 => array(
//  0 => 3, 
//  1 => 'c' 
// ) 
//) 
संबंधित मुद्दे