2016-04-07 15 views
1

Bu benim dizidir:Birden çokboyutlu bir dizide bir dizi anahtarın üst, büyük ebeveynli ve büyük ana anahtarlarını nasıl alabilirim?

array(1) { 
    ["farm"]=> 
    array(2) { 
    ["folder1"]=> 
    array(2) { 
     ["horse"]=> 
     array(1) { 
     ["fred"]=> 
     string(4) "fred" 
     } 
     ["cat"]=> 
     array(1) { 
     ["john"]=> 
     string(4) "john" 
     } 
    } 
    ["folder2"]=> 
    array(1) { 
     ["cat"]=> 
     array(2) { 
     ["sam"]=> 
     string(3) "sam" 
     ["cat"]=> 
     array(1) { 
      ["john"]=> 
      string(4) "john" 
     } 
     } 
    } 
    } 
} 

Bu benim fonksiyondur:

$search = "folder1"; 
    get_values($arr); 

    function get_values($arr, $id){ 
     global $search; 
     foreach($arr as $key => $value){ 

      if($key == $search){ 

       if(is_array($value)){ 

        foreach($value as $k => $v) { 
         echo $k; 
        } 
       }   
      }else{ 
       get_values($value, $id); 
      }  
     }  
    } 

Benim sonucu: ben sadece dizi anahtarına gerekenler

horse 
cat 

. Ayrıca tüm ebeveynleri (ana baba, büyükanne veya büyükbaba) kökeni tuşlarına basmak istiyorum. sonuç ihtiyacım olacaktır:

farm/folder1/horse 
farm/folder1/cat 

Bildiğim kadarıyla alabilir olarak budur.

foreach($value as $k => $v) { 
     echo $key."/".$k; 
    } 

sonuç

folder1/horse 
folder1/cat 

cevap

1

sizin işleve bir yol argüman ekleyin: Ama burada sadece üst değil büyük ve grandgrand ebeveynler olsun.

$search = "folder1"; 
get_values($arr, null); 

function get_values($arr, $path, $id){ 
    global $search; 
    foreach($arr as $key => $value){ 
     $basePath = $path === null ? $key : $path. "/" . $key; 
     if($key == $search){ 

      if(is_array($value)){ 

       foreach($value as $k => $v) { 
        echo $basePath . '/' . $k; 
       } 
      }   
     }else{ 
      get_values($value, $basePath, $id); 
     }  
    }  
} 
+0

Evet bu işe yarıyor! Teşekkür ederim :) Sadece bir sorun: Senin işlevin sonucu 1234/farm/folder1/horse 'yani bir şekilde' id 'yolun başlangıcına gitti. '$ Id' işlevinizden kaldırmaya çalıştım ama garip bir şekilde hala orada var – Jarla

+1

sorunu büyük olasılıkla çevreleyen kodda, bu işlevin $ kimliği aslında hiç kullanılmıyor, kodunuzdan düzenleme yapmadım – user3802077

+0

işlevi nasıl çalıştırdım, benim hatam! Yani aslında her şey yolunda! :) – Jarla

İlgili konular