2009-11-28 10 views

उत्तर

58

निम्नलिखित बराबर कर रहे हैं और एक दो आयामी सरणी में परिणाम:

$array = array(
    array(0, 1, 2), 
    array(3, 4, 5), 
); 

या

$array = array(); 

$array[] = array(0, 1, 2); 
$array[] = array(3, 4, 5); 
+5

उन दो आयामी सरणी में परिणाम नहीं, बल्कि सरणियों की एक सरणी में परिणाम। – dotancohen

+4

@ डॉटनकोहेन यह वास्तव में अर्थशास्त्र है, वास्तव में। व्यावहारिक रूप से दो अवधारणाएं समान हैं। वहां क्या दिखाया गया है और सी # जैसी भाषाओं में उपयोग किए जाने वाले बहु-आयामी सरणी के बीच एकमात्र अंतर वाक्यविन्यास है। और उस पर वाक्यविन्यास में काफी अंतर है। – Atli

+1

सी # में कम से कम, स्मृति आवश्यकताओं अलग हैं। सरणी की एक सरणी प्रत्येक सरणी के लिए आवश्यक स्मृति की मात्रा आवंटित करती है। एक द्वि-आयामी सरणी स्मृति के पूरे एन * एम आवंटित करता है। – dotancohen

8

या बड़े विन्यास के लिए, समान मूल्य वाली सभी:

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value); 

$m$n सरणी द्वारा $value पर सेट की गई सभी चीज़ों के साथ $m बनाएगा।

57

आप सरणी के सूचकांक को निर्दिष्ट करके एक एसोसिएटिव सरणी, या "हैश-टेबल" सरणी भी बना सकते हैं।

$array = array(
    0 => array(
     'name' => 'John Doe', 
     'email' => '[email protected]' 
    ), 
    1 => array(
     'name' => 'Jane Doe', 
     'email' => '[email protected]' 
    ), 
); 

कौन सा

$array = array(); 

$array[0] = array(); 
$array[0]['name'] = 'John Doe'; 
$array[0]['email'] = '[email protected]'; 

$array[1] = array(); 
$array[1]['name'] = 'Jane Doe'; 
$array[1]['email'] = '[email protected]'; 
+1

लूपिंग कथन का उपयोग करके हम यह वही सरणी कैसे बना सकते हैं? –

+0

@ अनूप-पीट दूसरे स्निपेट में दो दोहराने वाले ब्लॉक लूप में रखे जाएंगे और न्यूमेरिक इंडेक्स को वेरिएबल द्वारा प्रतिस्थापित किया जाएगा जो प्रत्येक पुनरावृत्ति को बढ़ाया जाता है। – Atli

+0

धन्यवाद @ एटली ... –

21

सबसे पहले के बराबर है, पीएचपी बहुआयामी सरणियों नहीं है, यह सरणियों के सरणियों है।

function declare($m, $n, $value = 0) { 
    return array_fill(0, $m, array_fill(0, $n, $value)); 
} 
+0

क्या आपके "arrays _or_ arrays" के बजाय "arrays _of_ arrays" का मतलब नहीं है? – Asaph

+0

@ एसाफ: हाँ मैंने किया। फिक्स्ड। धन्यवाद। – cletus

+1

अच्छा समाधान क्लेटस –

25

बस की घोषणा:

दूसरे, आप एक समारोह है कि यह करना होगा लिख ​​सकते हैं? आपको नहीं करना है बस ध्यान रखें कि चर मौजूद है:

$d = array(); 

सरणी गतिशील आकार दिया जाता है, और कुछ भी लिखने के लिए प्रयास गैर exsistant तत्व यह बनाता है (और पूरे सरणी अगर जरूरत पैदा करता है)

$d[1][2] = 3; 

यह किसी भी के लिए मान्य है पूर्व घोषणाओं के बिना आयामों की संख्या।

+1

इसके अलावा जो आपको आयामों के बारे में कुछ नहीं बताता है। यदि आप एम एक्स एन 2 डी सरणी घोषित कर रहे हैं, संभावना है कि यह एक मैट्रिक्स है और यदि यह एक मैट्रिक्स संभावना है तो आप गुणा कर रहे होंगे या उस पर कुछ ऐसा करेंगे जो तत्वों पर पुनरावृत्ति की आवश्यकता होगी, जो आप नहीं कर सकते हैं "स्पैस" और आयामों को नहीं जानते। – cletus

+0

@ कैलेटस: आप दाएं आयाम पर 'गिनती' का उपयोग कर सकते हैं, उदाहरण के लिए 'गिनती ($ डी [1]) ', जब तक कि मैं आपके बिंदु को गलत समझ नहीं रहा हूं? – DisgruntledGoat

+2

फिर भी, PHP में बहु-आयामी सरणी नहीं हैं। संभावना हमेशा बाहर निकल जाएगी कि सरणी की एक सरणी स्पैस हो सकती है।तो, एक वर्ग बनाने के बारे में जो सरणी का उपयोग करके मैट्रिक्स लागू करता है, कम से कम आप उचित कार्यान्वयन की अधिक देखभाल करेंगे। – Don

8

एक साधारण के लिए, "को भरने के रूप में तुम जाओ" समाधान की तरह:

$foo = array(array());

यह आपको एक लचीला छद्म दो आयामी सरणी कि पकड़ कर सकते हैं $ foo [n] [n मिल जाएगा] जहां एन < = ∞ (निश्चित रूप से आप स्मृति आकार की सामान्य बाधाओं से सीमित हैं, लेकिन आपको आशा है कि मुझे आशा है)। सिद्धांत रूप में, आपको जितनी आवश्यकता हो उतनी उप-सारणी बनाने के लिए बढ़ाया जा सकता है।

2

जहां तक ​​मुझे पता है कि ऐसा करने के लिए php फ़ंक्शन में कोई अंतर्निहित नहीं है, आपको इसे लूप के माध्यम से या एक कस्टम विधि के माध्यम से करने की आवश्यकता है जो @Amber द्वारा उत्तर में array_fill inidcated जैसे कुछ को कॉल करता है;

मुझे लगता है कि आप का मतलब है कि एक खाली लेकिन अंतर्निहित सरणी सरणी बनाई गई है।उदाहरण के लिए, आप 3 सरणियों के सरणी के नीचे की तरह एक अंतिम परिणाम हैं:

$final_array = array(array(), array(), array()); 

यह सिर्फ हाथ कोड के लिए सरल है, लेकिन एक तरह एक मनमाना आकार सरणी के लिए के 3 सरणियों के एक सरणी 3 सरणियों इसका इस्तेमाल करने से पहले प्रारंभ करने में जटिल हो रही शुरू होता है:

 $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array())); 

... आदि ...

मैं हताशा मिलता है। त्रुटियों की जांच या फेंकने के बिना उपयोग करने के लिए किसी गहराई के प्रारंभिक सरणी को घोषित करने का एक आसान तरीका होना अच्छा होगा।

2

और मेरे लिए तर्क है कि कोई सरणी स्पैस होनी चाहिए या नहीं, संदर्भ पर निर्भर करता है।

उदाहरण के लिए

, $ अगर एक [6] [9] तैयार नहीं हुआ है $ के बराबर एक [6] [9] के साथ उदाहरण के लिए "के साथ" या 0.

2
$r = array("arr1","arr2"); 

को डाला जा रहा है एक एकल सरणी तत्व गूंज आप लिखना चाहिए:

echo $r[0]; 
echo $r[1]; 

उत्पादन होगा: arr1 arr2

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