2015-07-09 60 views
0

我有一個JavaScript文件,將參數傳遞給後端php文件。哪個會試圖找出哪些值是真實的。PHP數組查找元素錯誤

這是傳遞的參數,

{"2":true,"3":false,"4":true} 

這是PHP代碼,將提取出真陣列的鍵,

<?php 
    print_r(loop_filters($_REQUEST['filters'])); 

// Functions starts here 

    function loop_filters($filters) 
    { 
    $filters = json_decode($filters); 
    // return $filters; 
    $filter_array = []; 

    while($filter_key = current($filters)) 
    { 
     if($filter_key === true) 
     { 
     $filter_array[] = key($filters); 
     } 
     next($filters); 
    } 
    return $filter_array; 
    } 
?> 

但是輸出是

Array ([0] => 2) 

爲什麼它沒有檢測到4是真實的,並給出如

Array ([0] => 2 , [1] => 4) 

怎麼了,我該如何解決?由於

+0

真的嗎?寫一個函數來對整個事物進行foreach? – AbraCadaver

回答

5

您的代碼不工作,只是因爲這個:

while($filter_key = current($filters)) 

因爲在第二次迭代你的價值將是:FALSE而我們都知道:

while(FALSE) 

此次榮獲」運行,所以你在第一次迭代之後就結束了循環。

如何解決?只需簡單地刪除next()調用,並用foreach循環替換while循環,例如

function loop_filters($filters) { 
    $filters = json_decode($filters); 

    foreach($filters as $key => $filter_key) { 
     if($filter_key === true) { 
      $filter_array[] = $key; 
     } 
    } 

    return $filter_array; 
} 
1

Rizier123解決問題與您的代碼,但是,對於這種特殊情況下,才能得到true值的關鍵是要簡單得多:

$filter_array = array_keys($filters, true, true); 
+0

有了這個,你只能過濾「假」值。所以1,34 ......也會通過這個。 (=>'array_filter($ filters,function($ v){return $ v === TRUE;})') – Rizier123

+1

事實上,它更容易:-) – AbraCadaver

+0

是的,我不認爲它比這更簡單:) – Rizier123