2011-06-12 40 views
6

से विशिष्ट मान पाने के लिए मैं निम्नलिखित सरणी संरचना है:बहुआयामी सरणी - उप सरणी

 
Array 
(
    [0] => Array 
     (
      [product_option_id] => 236 
      [option_id] => 14 
      [name] => Masura S 
      [type] => select 
      [option_value] => Array 
       (
        [0] => Array 
         (
          [product_option_value_id] => 33 
          [option_value_id] => 53 
          [name] => Alb 
          [price] => 
          [price_prefix] => + 
         ) 

        [1] => Array 
         (
          [product_option_value_id] => 35 
          [option_value_id] => 55 
          [name] => Rosu 
          [price] => 
          [price_prefix] => + 
         ) 

       ) 

      [required] => 0 
     ) 

    [1] => Array 
     (
      [product_option_id] => 237 
      [option_id] => 15 
      [name] => Masura M 
      [type] => select 
      [option_value] => Array 
       (
        [0] => Array 
         (
          [product_option_value_id] => 34 
          [option_value_id] => 58 
          [name] => Rosu 
          [price] => 
          [price_prefix] => + 
         ) 

       ) 

      [required] => 0 
     ) 
) 

मैं अपने आप को इस सरणी से सभी [नाम] मूल्यों को प्रदर्शित करने की कोशिश कर रहा में खो सकते हैं। प्रथम स्तर [name] (जैसे [name] => Masura S) और फिर एक दूसरे लटकती दूसरे स्तर [name] (जैसे [name] => Alb) के साथ चयन के आधार पर चयन

मुझे क्या करना कोशिश कर रहा हूँ ड्रॉप डाउन से एक फार्म को भरने के लिए है।

मैं इसे सराहना करते हैं अगर आप किसी भी संकेत दिए गए है ...

+0

आप PHP का उपयोग कर रहे हैं, सही? –

+0

हां, PHP, आप सही हैं! – RePho

+0

इन दो तालिकाओं के बीच समान 'नाम' फ़ील्ड का उपयोग करके 'संघ' क्वेरी, तालिका स्रोत के आधार पर स्तर निर्दिष्ट करने वाले उपनाम/कस्टम फ़ील्ड के साथ, आपको काम करने के लिए एक बेहतर गठित सरणी मिलनी चाहिए। क्या आपने ऐसा कुछ करने की कोशिश की है? –

उत्तर

7

आप पॉप्युलेट कर सकते हैं पहले इस तरह का चयन करें:

<select> 

    <?php $c=count($array); 
    for ($i=0; $i < $c; $i++) 
    { ?> 
     <option><?php echo $array[$i]['name'];?></option> 
    <?php } ?> 

</select> 

2 का चयन करें:

<select> 

    <?php 
    for ($i=0; $i < $c; $i++) 
    { 
     $c2=count($array[$i]); 
     for ($j=0;$j<$c2;$j++){ 
    ?> 
     <option><?php echo $array[$i][$j]['name'];?></option> 
    <?php }} ?> 

</select> 
+0

धन्यवाद बेलोनू, इसने मुझे इसे समझने के लिए काफी करीब आ गया है, अब यह काम करता है जैसा कि मैं चाहता हूं! – RePho

+0

मैंने बेलोनू ने उदाहरण के लिए कुछ संशोधन किए हैं, और एक jQuery चेनिंग स्क्रिप्ट से थोड़ी मदद के साथ अब मेरे पास वर्किंग कोड है। मुझे बस इस लाइन को संशोधित करना पड़ा: $ c2 = गिनती ($ विकल्प [$ i] ['option_value']); केवल विशिष्ट नाम पर उपलब्ध विकल्पों को गिनने के लिए और इसके बाद: उस के लिए सही विकल्प प्रदर्शित करने के लिए नाम। धन्यवाद! अब ... मेरे बाकी कोड को हल करने के लिए :) – RePho

+0

ठीक है आपका स्वागत है, सही –

4

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

$product_names = $option_names = array(); 
foreach ($products as $index => $product) { 
    $product_names[$index] = $product['name']; 

    foreach ($product['option_value'] as $option) { 
     $option_names[$index][] = $option['name']; 
    } 
} 

जब आप सरणी अनुक्रमणिका 0 के लिए उत्पाद का नाम चाहते हैं, तो आप $ product_names [0] (एक स्ट्रिंग) का उपयोग करेंगे और उस उत्पाद के विकल्प नाम $ option_names [0] (एक सरणी) से मिल सकते हैं।

उपरोक्त कोड मौजूदा आईडी के बारे में परवाह नहीं करता है, इसलिए यदि आपको फ़ॉर्म के लिए उनकी आवश्यकता है, तो आपको कोड को और अधिक विस्तारित करने की आवश्यकता होगी।

+0

मैं कोशिश करूँगा और देख सकता हूं कि यह मुझे कहाँ प्राप्त करता है :) धन्यवाद! – RePho

3

आप एक पुनरावर्ती समारोह
यहाँ एक उदाहरण

function recursion($array) { 
    foreach ($array as $key => $value) { 
     echo $value; 
     if (is_array($value)) 
      $this->recursion($value); 
    } 
} 

recursion($array); 
+1

के रूप में चिह्नित करने के लिए मत भूलना मैं इस फ़ंक्शन से मूल्य कैसे वापस कर सकता हूं? मैं '$ value' वापस करना चाहता हूं।मैं इस तरह से 'समारोह प्रत्यावर्तन ($ सरणी) { foreach ($ कुंजी => $ मूल्य के रूप में $ सरणी) { अगर में समारोह संशोधित ($ कुंजी ===" sourceChannel ') { \t \t \t \t $ getId = $ मूल्य [ 'आईडी']; \t \t \t \t वापसी $ getId; \t \t \t} \t \t अगर (is_array ($ मूल्य)) प्रत्यावर्तन ($ मूल्य); \t \t} } 'लेकिन यह हमेशा खाली हो जाता है! – coderunner

2

का उपयोग करने की आवश्यकता होगी इसे आजमाएं:

$name = array_column($array, 'name'); 
संबंधित मुद्दे