2010-11-20 26 views
1

aşağıdaki işlev güzel bir değer dizide bulunur veya bulunmazsa bana söyler ..array_search_recursive() .. değeri çok boyutlu dizide nerede bulunduğumu bulmama yardım et

function array_search_recursive($needle, $haystack) { 
    foreach ($haystack as $value) { 
     if (is_array($value) && array_search_recursive($needle, $value)) return true; 
     else if ($value == $needle) return true; 
    } 
    return false; 
} 

ancak dizideki değerin çıktığı dizinin numarasını istiyorum.

+0

PHP'yi bilmiyorum, ancak (eğer PHP'de varsa) için bir standart oluşturmanız gerekeceğini düşünüyorum, böylece her zaman dizininiz var. Ama bu şekilde bile, sadece en iyi diziyi elde edersiniz, sonuncusu değil, eğer istediğin buysa. – MPelletier

cevap

0

İşlevden geçirilmiş üçüncü bir parametre ekleyerek işlevinizi değiştirdim.

İğne bulunduğunda işlev true değerini döndürür. Ayrıca, $ dizinleri bulunan değere dizin dizisidir.

function array_search_recursive($needle, $haystack, &$indexes=array()) 
{ 
    foreach ($haystack as $key => $value) { 
     if (is_array($value)) { 
      $indexes[] = $key; 
      $status = array_search_recursive($needle, $value, $indexes); 
      if ($status) { 
       return true; 
      } else { 
       $indexes = array(); 
      } 
     } else if ($value == $needle) { 
      $indexes[] = $key; 
      return true; 
     } 
    } 
    return false; 
} 

Örnek:

$haystack1 = array(
    0 => 'Sample 1', 
    1 => 'Sample 2', 
    2 => array(
     'Key' => 'Sample 3', 
     1 => array(
      0 => 'Sample 4', 
      1 => 'Sample 5' 
     ) 
    ), 
    4 => 'Sample 6', 
    3 => array(
     0 => 'Sample 7' 
     ), 
); 

dizinleri için "Örnek 5" [2] [1] [1].

if (array_search_recursive('Sample 5', $haystack1, $indexes)) { 
/** 
* Output 
* Array 
* (
*  [0] => 2 
*  [1] => 1 
*  [2] => 1 
*) 
*/ 
    echo '<pre>'; 
    print_r ($indexes); 
    echo '</pre>'; 
    die; 
}