2013-05-09 11 views
5

मैं बेहतर सरणियों समझने की कोशिश कर रहा हूँ। मेरे प्राथमिक प्रश्नों को क्षमा करें क्योंकि मैंने तीन हफ्ते पहले अपनी पहली PHP पुस्तक खोली है।सरणी भागों को एक्सेस

मुझे लगता है कि आप (या पाश के लिए) नीचे के रूप में एक foreach का उपयोग कर कुंजी/मान जोड़े प्राप्त कर सकते हैं मिलता है।

$stockprices= array("Google"=>"800", "Apple"=>"400", "Microsoft"=>"4", "RIM"=>"15", "Facebook"=>"30"); 

foreach ($stockprices as $key =>$price) 

क्या मैं भ्रमित हो के बारे में इस तरह बहु आयामी सरणी हैं:

$states=(array([0]=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1), 
       [1]=>array("capital"=> "Austin", "joined_union"=>1845,"population_rank"=> 2), 
       [2]=>array("capital"=> "Boston", "joined_union"=>1788,"population_rank"=> 14) 
      )); 

मेरा पहला सवाल वास्तव में बुनियादी है: मुझे पता है कि "राजधानी '," joined_union "," population_rank "चाबियाँ हैं और "सैक्रामेंटो", "1850", "1" मान हैं (सही?)। लेकिन आप [0] [1] [2] क्या कहते हैं? क्या वे "मुख्य कुंजी" और "पूंजी" आदि उप-कुंजी हैं? मैं उन लोगों के लिए किसी भी परिभाषा नहीं मिल सकता है;। किताबों में और न ही ऑनलाइन न

मुख्य प्रश्न मैं कैसे पुनः प्राप्त करते सरणी [0] [1] [2] कहो मैं प्राप्त करना चाहते है? उस सरणी जो 1845 में शामिल हुई थी (या 1800 के दशक के दौरान भी ट्रिकियर), फिर उस सरणी को हटा दें।

अंत में, मैं सरणी नाम कर सकते हैं [0] [1] [2] कैलिफोर्निया, टेक्सास और मैसाचुसेट्स तदनुसार के रूप में?

$states=(array("California"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1), 
       "Texas"=>array("capital"=> "Austin", "joined_union"=>1845,"population_rank"=> 2), 
       "Massachusetts"=>array("capital"=> "Boston", "joined_union"=>1788,"population_rank"=> 14) 
      )); 
+1

वस्तुओं का उपयोग करने के लिए एक बहुत साफ तरीका है। [ऑब्जेक्ट उन्मुख PHP] (http://php.net/manual/en/language.oop5.php) के बारे में पढ़ें और आप "सरणी-उन्माद" से बच सकते हैं। – CodeZombie

+2

यदि आप अपना कोड अधिक अच्छी तरह से इंडेंट करते हैं, या एक ['print_r' प्रस्तुति] (http://array.include-once.org/?foreach=1&assoc=1&json=%5B% देखें) एक्सेस पथ को पहचानना आसान हो जाता है 7B% 22capital% 22% 3 ए% 22Sacramento% 22% 2C% 22joined_union% 22% 3A1850% 2C% 22population_rank% 22% 3A1% 7 दिन% 2C% 7B% 22capital% 22% 3 ए% 22Austin% 22% 2C% 22joined_union% 22% 3A1845% 2C% 22population_rank% 22% 3A2% 7 दिन% 2C% 7B% 22capital% 22% 3 ए% 22Boston% 22% 2C% 22joined_union% 22% 3A1788% 2C% 22population_rank% 22% 3A14% 7 दिन% 5D% 0 d% 0A) । वास्तव में "मुख्य कुंजी" या कभी-कभी "शीर्ष-स्तर" सरणी कुंजी सामान्य पदनाम होते हैं। – mario

+1

जबकि मैंने नीचे दिए गए उत्तरों को बेहतर ढंग से समझने में आपकी मदद करने के लिए उत्तर दिया - जो महत्वपूर्ण है ... लंबी अवधि में, मैं @ZombieHunter से सहमत हूं - जितना अधिक जटिल आप अपने सरणी के साथ प्राप्त करते हैं, उतना अधिक आप ऑब्जेक्ट उन्मुख होना चाहते हैं। –

उत्तर

1

अन्य भाषाओं के विपरीत, PHP में सरणियों संख्यात्मक या स्ट्रिंग कुंजी का उपयोग कर सकते हैं। आप चुनते हैं। (यह PHP और अन्य भाषाओं की एक अच्छी तरह से प्यार करता था सुविधा उपहास नहीं है!)

$states = array(
    "California" => array(
     "capital"   => "Sacramento", 
     "joined_union" => 1850, 
     "population_rank" => 1 
    ), 
    "Texas"   => array(
     "capital"   => "Austin", 
     "joined_union" => 1845, 
     "population_rank" => 2 
    ), 
    "Massachusetts" => array(
     "capital"   => "Boston", 
     "joined_union" => 1788, 
     "population_rank" => 14 
    ) 
); 

संरचना आप क्वेरी करने के लिए के रूप में, वहाँ दो तरीके
1) लूपिंग हैं

$joined1850_loop = array(); 
foreach($states as $stateName => $stateData) { 
    if($stateData['joined_union'] == 1850) { 
     $joined1850_loop[$stateName] = $stateData; 
    } 
} 
print_r($joined1850_loop); 
/* 
Array 
(
    [California] => Array 
     (
      [capital] => Sacramento 
      [joined_union] => 1850 
      [population_rank] => 1 
     ) 

) 
*/ 

2)

012,351 -

$joined1850 = array_filter(
    $states, 
    function($state) { 
     return $state['joined_union'] == 1850; 
    } 
); 
print_r($joined1850); 
/* 
Array 
(
    [California] => Array 
     (
      [capital] => Sacramento 
      [joined_union] => 1850 
      [population_rank] => 1 
     ) 

) 
*/ 

: array_filter समारोह का उपयोग करना

$joined1800s = array_filter(
    $states, 
    function ($state){ 
     return $state['joined_union'] >= 1800 && $state['joined_union'] < 1900; 
    } 
); 
print_r($joined1800s); 
/* 
Array 
(
    [California] => Array 
     (
      [capital] => Sacramento 
      [joined_union] => 1850 
      [population_rank] => 1 
     ) 

    [Texas] => Array 
     (
      [capital] => Austin 
      [joined_union] => 1845 
      [population_rank] => 2 
     ) 

) 
*/ 
+1

मैं इस बात से असहमत हूं कि "यह PHP की एक अच्छी तरह से प्यार की विशेषता नहीं है" - PHP का "सरणी" डेटा-प्रकार भाषा की सबसे शक्तिशाली सुविधाओं में से एक है, और इसका उपयोग समर्पित प्रकारों (सूचियों, वैक्टरों, हैश, कतार और ढेर, सेट, मल्टीसेट, आदि) – IMSoP

+0

@IMSoP जो अच्छी चीज हो सकती है या नहीं भी हो सकती है; समर्पित प्रकार चीजों को बेहतर बना सकते हैं, जैसे सभी सख्त प्रकार की सुरक्षा आमतौर पर अच्छी होती है। मैं इस बात से सहमत हूं कि मैंने कभी भी किसी को कभी भी PHP के सरणी प्रकार के बारे में शिकायत नहीं सुना है। – deceze

+0

@deceze \t समर्पित प्रकार वास्तव में उपयोगी हैं, लेकिन आप वहां पर भरोसा करते हैं जो आपकी आवश्यकताओं को पूरा करता है। उदाहरण के लिए, जावास्क्रिप्ट में "ऑर्डर" ऑर्डर नहीं है (ऑब्जेक्ट्स को हैश के रूप में इस्तेमाल किया जा सकता है, लेकिन रनटाइम के लिए लूपिंग के दौरान किसी भी विशेष क्रम में गुणों का उत्पादन करने की आवश्यकता नहीं है)। मुझे पता है कि यह एक राय है, लेकिन मुझे PHP के सरणी प्रकार मिलते हैं, और सामान्य रूप से टाइप सिस्टम कुछ बहुत आसान एल्गोरिदम के लिए अनुमति देता है - अगर सावधानी से उपयोग किया जाता है। – IMSoP

1

1: बहुआयामी सरणी मूल रूप से 'सरणी के सरणी' होते हैं।

तो अगर हम यहाँ देखो:

array("0"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1) 

0 कुंजी है, और सरणी मूल्य है।

फिर, मूल्य के अंदर, आपके पास capital एक कुंजी के रूप में, और Sacramento एक मान के रूप में है।

2: को हटाने सरणियों के लिए: Delete an element from an array

3: कुंजी

हाँ के लिए राज्य के नाम, आप बदल सकते हैं कि 0, 1, 2 राज्य के नाम में। वे एक क्रमांकित सरणी के बजाय कुंजी-मूल्य बन जाते हैं। जो आपको निकालना चाहते हैं उसे हटाने के लिए बहुत आसान बनाता है।

1

बहुआयामी सरणियों बस सरणियों जो मूल्यों के रूप में सरणियों हैं। सरल या "स्केलर" प्रकार int, string और bool पसंद हैं, वे केवल एक मान और एक मान रखते हैं।Arrays यौगिक प्रकार हैं, जिसका अर्थ है कि यह एक ऐसी चीज है जो कई अन्य चीजों को एक साथ जोड़ती है। एक सरणी में सरणी सहित अन्य प्रकार के मान हो सकते हैं।

echo $array['foo']['bar']; 

$array['foo'] आपको लगता है कि सरणी पर मूल्य array('bar' => 'baz'), ['bar'] तक पहुँच देता है:

$array = array('foo' => array('bar' => 'baz')); 

$foo = $array['foo']; // $foo is now array('bar' => 'baz') 

echo $foo['bar']; // outputs 'baz' 

यह बस के रूप में इसके बाद के संस्करण एक ही बात के लिए आशुलिपि है:

सरल दृश्य शायद इस पूरे अक्षरों में लिखावट है आपको मूल्य 'baz' देता है। इससे कोई फर्क नहीं पड़ता कि आप इंटरमीडिएट वैल्यू को वैरिएबल में असाइन करते हैं या सीधे जारी रखते हैं।

दूसरी तरह के आसपास है, यहाँ अवधारणा का एक प्रदर्शन है कि बहुआयामी सरणियों बस सरणियों में सरणियों हैं:

$baz = 'baz'; 
$bar = array('bar' => $baz); 
$array = array('foo' => $bar); 

इसके लिए बस इतना है कि।

आप सरणी "उप सरणी" में नेस्टेड सरणी को कॉल कर सकते हैं, हालांकि इसमें कोई वास्तविक परिभाषा नहीं है और इसे परिभाषित करने के लिए वास्तव में आवश्यक नहीं है, क्योंकि नेस्टेड सरणी किसी भी चीज़ का विशेष मामला नहीं है।

आप "दो आयामी", "त्रि-आयामी" इत्यादि शब्द का उपयोग करके स्पष्टीकरण पर ठोकर खा सकते हैं। इसे टेबल और क्यूब्स के रूप में कल्पना न करें, क्योंकि यह सटीक नहीं है और जब यह तीन आयामों से परे हो जाता है तो आपका सिर विस्फोट कर देगा। यह "आयाम" सरल सरणी के गहराई को संदर्भित करता है, यानी एक दूसरे के भीतर कितने सरणी घोंसले हैं।

+0

धन्यवाद, स्पष्टीकरण के लिए @deceze जो इसे कम जटिल और डरावना बनाता है। – Patty

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