2015-12-08 106 views
-2

我在我的課上有這個方法,這很好,(kind-of)。 但是,無論什麼原因,它返回NULL。 如果我在函數中放置了一個(print_r($ keys)),它會打印出來。類方法,在實際值上返回NULL

RETURN未傳遞值。有什麼想法嗎?

function arrayKeyPath ($searchFor, $arr, $keys=array()) 
    { 
     if(!empty($arr) && is_array($arr)) { 
      if(isset($arr[$searchFor])) { 
       return $keys; 
      } 
      foreach($arr as $pKey => $a) { 
       if(is_array($a)) { 
        $keys[] = $pKey; 
        arrayKeyPath($searchFor, $a, $keys); 
       } 
      } 
     } 
    } 

    $user['results'][0] = array (
     'userId' => '1', 
     'firstName' => 'John', 
     'lastName' => 'Doe', 
     'options' => 
      array (
       'showNews' => 'on', 
       'newOptions' => array(
        'option1'=> 1, 
        'option2'=> 2, 
        'option3'=> 3 
       ), 
       'connectWithTimeFrame1' => '30', 
       'defaultMessageTemplate' => '12', 
       'connectWithTimeFrame' => 90, 
      ), 
    ); 



$exists = arrayKeyPath('option1', $user['results'][0]); 
var_dump($exists); 

網上運行版本 https://ideone.com/fnml1S

+1

沒有'第一級option1'鍵,以便將'return'從不打 – PeeHaa

+0

它繼續通過循環重新循環,它確實被擊中。如果您在返回之前放置一個Print_R($鍵),它將顯示它應該顯示的內容。 – Justin

+0

不,它不會被擊中。它會繼續執行,並在您的遞歸調用中可能遇到*的地方*,但在第一次函數調用時沒有返回該位置。你只是忽略你的進一步函數調用的結果 – PeeHaa

回答

0

那麼你基本上試圖做的是尋找一個多維數組的關鍵。如果你只是想檢查,如果關鍵是有在所有,考慮下面的代碼:

// shamelessly copied from http://codeaid.net/php/extract-all-keys-from-a-multidimensional-array 
function array_keys_multi(array $array) { 
    $keys = array(); 
    foreach ($array as $key => $value) { 
     $keys[] = $key; 
     if (is_array($value)) 
      $keys = array_merge($keys, array_keys_multi($value)); 
    } 
    return $keys; 
} 

// in your case: 
// array("results", 0, "userId", "firstName", "lastName", "options", "showNews", "newOptions", "option1", "option2", "option3", "connectWithTimeFrame1", "defaultMessageTemplate", "connectWithTimeFrame"); 

// call the function 
$keys = array_keys_multi($user); 

// check if the "option1" can be found in the array 
if (in_array("option1", $keys)) 
    echo "Yup, in there."; 
+0

是的,我想檢查Key的路徑.. ... – Justin

+1

然後,也許這是給你的:http://stackoverflow.com/questions/27626880/searching-for-key-in-multidimensional-array-and-returning-path-to-it – Jan