2012-09-06 93 views
1

我有下面的PHP搜索腳本,將遍歷多維數組。當$價值發現它會返回,但我希望返回地址,以及(考慮到它是隻有2級)獲取地址多維數組遞歸搜索php

function arr_search($array, $line, $lvl=0) 
{ 



// Loops through each element. If element again is array, function is recalled. If not, result is echoed. 
foreach($array as $key=>$value) 
{ 
    if(is_array($value)) 
    { 
     arr_search($value, $line); 
    }else{ 
      if(strpos($line, $value)) 
      echo "found $key: $value\n"; 
      // return $value; // should return array with [?],[$key],[$value] 
    } 

} 

return false; 
} 

,你可以看到,$關鍵是找到最新的數組的地址。但我想有父數組的索引。

陣列例如:

Array 
(
[0] => Array 
    (
     [0] => string324 
     [1] => string234 
     [2] => string7567 
     [3] => stringw34 

    ) 

[1] => Array 
    (
     [0] => string4563 
     [1] => string37 

    ) 

[2] => Array 
    (
     [0] => string3735 
     [1] => string3563 
     [2] => string3563 
     [3] => string356 
     [4] => string356 
    ) 
) 
+0

你叫什麼地址?像「0,1」,如果string37? –

回答

4

這會幫助你。

<?php 

function array_find_deep(array $array, $string, array &$result) { 
    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $success = array_find_deep($value, $string, $result); 
      if ($success) { 
       array_unshift($result, $key); 
       return true; 
      } 
     } else { 
      if (strcmp($string, $value) == 0) { 
       array_unshift($result, $key); 
       return true; 
      } 
     } 
    } 
    return false; 
} 

$array = array(
    1 => array(
     1 => array(
      1 => "a", 
      2 => "b", 
      3 => "c", 
      4 => "d", 
      5 => "e", 
     ), 
     2 => array(
      1 => "f", 
      2 => "g", 
      3 => "h", 
      4 => "i", 
      5 => "j", 
     ), 
     3 => array(
      1 => "k", 
      2 => "l", 
      3 => "m", 
      4 => "n", 
      5 => "o", 
     ), 
    ), 
    2 => array(
     1 => array(
      1 => "A", 
      2 => "B", 
      3 => "C", 
      4 => "D", 
      5 => "E", 
     ), 
     2 => array(
      1 => "F", 
      2 => "G", 
      3 => "H", 
      4 => "I", 
      5 => "J", 
     ), 
     3 => array(
      1 => "K", 
      2 => "L", 
      3 => "M", 
      4 => "N", 
      5 => "O", 
     ), 
    ), 
    3 => array(
     1 => array(
      1 => "p", 
      2 => "q", 
      3 => "r", 
      4 => "s", 
      5 => "t", 
     ), 
     2 => array(
      1 => "u", 
      2 => "v", 
      3 => "w", 
      4 => "x", 
      5 => "y", 
     ), 
     3 => array(
      1 => "z", 
      2 => "P", 
      3 => "Q", 
      4 => "R", 
      5 => "S", 
     ), 
    ), 
); 

$result = array(); 
$success = array_find_deep($array, 's', $result); 

var_dump($result); 

將顯示「方式」以獲取您的數據。

array(3) { 
    [0]=> 
    int(3) 
    [1]=> 
    int(1) 
    [2]=> 
    int(4) 
} 
+0

這對我來說非常合適,謝謝:) –