2014-02-26 59 views
0

我正在寫一個函數,它檢查嵌套的鍵,如果它存在於JSON中,但我有卡住的地方,如果代碼是正確的,那麼它必須返回true或false,但它不是。它返回空值功能沒有返回true或false,如果它是正確的

php函數是

function checkNestedKeysExists($JSONRequest,$keyCheckArray){ 
$currentKey = current($keyCheckArray); 
$JSONRequest = array_change_key_case($JSONRequest, CASE_LOWER); 

    if(array_key_exists($currentKey,$JSONRequest)){ 
     if($currentKey==end($keyCheckArray)){ 
      return true;    
     }  
     else { 
      array_shift($keyCheckArray); 
      $this->checkNestedKeysExists($JSONRequest[$currentKey],$keyCheckArray);     
      //echo "F"; 
     }  
    } 
    else{ 
     return false; 
    } 
} 

給定陣列是

$keyCheckArray = array('data','device_info','deviceid'); 

和$ JSONRequest是

{ 
"timestamp": "2014-01-01 11:11:11", 
"data": { 
    "requestid": "bcpcvssi1", 
    "device_info": { 
     "os": "Android", 
     "deviceId": "123123", 
     "userProfile": { 
      "email": [ 
       "[email protected]" 
      ], 
      "gender": "Male", 
      "age": "19", 
      "interest": [ 
       "Apple", 
       "Banana" 
      ] 
     } 
    } 
} 
} 
+0

您需要返回遞歸函數的輸出結果修改,你做遞歸調用你的代碼的行。 'return $ this-> checkNestedKeysExists($ JSONRequest [$ currentKey],$ keyCheckArray);'。 – h2ooooooo

+0

謝謝@ h2ooooooo它的作品! – vishal

+0

這是我在回答中給你的第一條建議。 –

回答

1

像下面

return $this->checkNestedKeysExists($JSONRequest[$currentKey],$keyCheckArray); 

所以它會回電話

0

通$ JSONRequest在

json_decode($JSONRequest, true); 
+0

他正在使用數組函數。也許你必須提到第二個參數來創建一個數組; – demonking

+0

對,謝謝:) –

0

編輯:對不起,我第一次錯了。 如果您正在切換元素,則可能使用array[0]而不是current(),這可能會造成問題。當然,請執行var_dump()來檢查值。

0

$ currentkey ='data'and end($ keyCheckArray)='deviceid'。這永遠不會返回true,因此你沒有指定返回值,它將返回null。

兩個務必:

  1. 給功能與每一個可能的方式結束功能有效的返回值。

  2. 爲每個固定結果(如$ keyCheckArray)創建一個變量。

如果完成測試功能(和編輯它用於測試目的):

function checkNestedKeysExists($JSONRequest,$keyCheckArray){ 
    $currentKey = current($keyCheckArray); 
    $JSONRequest = array_change_key_case($JSONRequest, CASE_LOWER); 
    $endValue = end($keyCheckArray); 

if(array_key_exists($currentKey,$JSONRequest)){ 
    print 'currentKey = '.$currentKey.", end = ".$endValue."<br>\n"; 
    if($currentKey== $endValue){ 
     return 'correct';    
    }else { 
     array_shift($keyCheckArray); 
     $p = checkNestedKeysExists($JSONRequest[$currentKey],$keyCheckArray); 
     print "p = ".$p."<br>\n"; 
     //echo "F"; 
     return $currentKey; 
    }  
} 
else{ 
    return false; 
} 
} 

輸出是這樣的: 正確

DEVICE_INFO

數據

我建議你把你的函數改成while循環。一旦找到要求的結果,返回true。

+0

幹運行的代碼,由於遞歸到達$ currentkey ='deviceid'和結束($ keyCheckArray)='deviceid' 。它有一個有效的返回函數,並且end($ keyCheckArray)總是固定的 – vishal

+0

爲固定結果創建一個變量正在使用輕量級設計模式並且對內存使用友好。 –

+0

謝謝,但它確實解決了我的問題 – vishal

相關問題