2009-10-08 16 views
15

से हो रही है मानों मैं निम्नलिखित मुख्य सरणी $mसाहचर्य सरणी

Array 
(
    [0] => Array 
     (
      [home] => Home 
     ) 

    [1] => Array 
     (
      [contact_us] => Contact Us 
     ) 

    [2] => Array 
     (
      [about_us] => About Us 
     ) 

    [3] => Array 
     (
      [feedback_form] => Feedback Form 
     ) 

    [4] => Array 
     (
      [enquiry_form] => Products 
     ) 

    [5] => Array 
     (
      [gallery] => Gallery 
     ) 

) 

कहा जाता है मैं, मूल्यों घर, एक सरणी संग्रहीत $ विकल्पों में CONTACT_US जैसे मैं मुख्य सरणी कहा जाता है $ से मूल्यों को प्राप्त करने की आवश्यकता $ विकल्प सरणी

जैसे का उपयोग कर रहा हूँ। $ विकल्प सरणी मूल्य घर है, तो मैं मैं किसी भी तरह बस से मूल्यों को प्राप्त नहीं कर सकता के रूप में

    $c = 0; 
        foreach($options as $o){ 
         echo $m[$c][$o]; 
         ++$c; 
        } 

इस प्रकार मुख्य सरणी ($ एम) से मूल्य होम

मेरे कोड दिखता प्राप्त करने की आवश्यकता मुख्य सरणी?

उत्तर

18

मैं पहली बार $m एक सरल करने के लिए बदलना चाहते हैं केवल एक ही स्तर के साथ सरणी:

$new_m = array(); 
foreach ($m as $item) { 
    foreach ($item as $key => $value) { 
     $new_m[$key] = $value; 
    } 
} 

तो आप का उपयोग कर सकते हैं:

foreach ($options as $o) { 
    echo $new_m[$o]; 
} 
0

यह कैसे है?

foreach($options as $option) 
{ 
    foreach($m as $m_key => $m_value) 
    { 
    if($option == $m_key) 
    { 
     echo 'Name for ' . $options . ' is ' . $m_value; 
     break; 
    } 
    } 
} 
2

इस प्रयास करें:

foreach($options as $o){ 
    foreach($m as $check){ 
     if(isset($check[$o])) echo $check[$o]; 
    } 
} 

हालांकि यह बेहतर होगा सरणी केवल पृष्ठों से भरा है और नहीं एक बहुआयामी सारणी रखने के लिए

0

क्या आप सुनिश्चित हैं कि विकल्प सरणी $ एम के समान क्रम में है? हो सकता है कि आप

echo $m[$c][$o]; 

$ m [0] ['गैलरी'] में हल हो रहा है जो स्पष्ट रूप से खाली है।

आप अलग अलग समाधान, एक अच्छा एक (शायद इतनी कुशल नहीं) इस तरह होना चाहिए कोशिश कर सकते हैं, मेरे लिए:

for($c=0, $limit=count($c); $c < $limit; $c++) 
    if (array_search(key($m[$c]), $options)) 
    echo current($m[$c]); 

आप अपने दृष्टिकोण का उपयोग करने की है की तरह कुछ के साथ अपने सरणी समतल करना चाहते हैं यह:

foreach ($m as $o) 
    $flattenedArray[key($o)]=current($o); 

foreach ($options as $o) 
    echo $flattenedArray($o); 

ऐसा करने से, हालांकि, ऐसे डुप्लीकेट होने पर आपकी मूल सरणी की डुप्लिकेट आवाजों को समाप्त कर दिया जाता है।

0

एक पुनरावर्ती array_walk समारोह का उपयोग कर, उदाहरण के लिए प्रयास करें

$a = array(
     array('ooo'=>'yeah'), 
     array('bbb'=>'man') 
    ); 


function get_array_values($item, $key){ 
    if(!is_numeric($key)){ 
     echo "$item\n"; 
    } 
} 

array_walk_recursive($a,'get_array_values'); 
+0

आप प्रभावी रूप से जो कुछ भी आप एक पेड़ की तरह सरणी संरचना से चाहते हैं बनाने के लिए समारोह मोड़ सकते हैं। – clops

1

उप सरणियों में कुंजी मान लिया जाये कि अद्वितीय हैं आप कर सकते हैं

  1. मर्ज एक एकल सरणी में सभी उप सरणियों array_merge
  2. पर call_user_func_array का उपयोग कर
  3. स्वैप कुंजी और अपने विकल्प सरणी
  4. array_intersect_key उपयोग के मूल्यों सभी मूल्यों के साथ एक सरणी पुनः प्राप्त करने के।

उदाहरण इसलिए की तरह:

$options = array('about_us', 'enquiry_form'); 

$values = array_intersect_key(
      call_user_func_array('array_merge', $m), // Merge all subarrays 
      array_flip($options)      // Make values in options keys 
     ); 

print_r($values); 

जिसमें परिणाम:

Array 
(
    [about_us] => About Us 
    [enquiry_form] => Products 
) 
0
$trails1 = array(); 
      foreach ($trails as $item) { 
       foreach ($item as $key => $value) { 
        $trails1[].= $value; 
       } 

      } 
      echo '<pre>';print_r($trails1); 
     exit; 
संबंधित मुद्दे