2013-04-05 55 views
1

後不同的結果我想json_encode回這樣的事情json_encode與array_filter

[{key: "value"},{key:"value"},...] 

相反,我得到這樣的:

{"1": {key: "value"}, "2": {key: "value"}, ...} 

結果是罰款,直到我做了一個array_filter ..奇怪...

function somefunction($id, $ignore = array()) { 
    $ignorefunc = function($obj) use ($ignore) { 
     return !in_array($obj['key'], $ignore); 
    }; 

    global $db; 

    $q = "Some query"; 

    $rows = $db->giveMeSomeRows(); 
    $result = array(); 
    if ($rows) { 
     // this mapping I've always done 
     $result = array_map(array('SomeClass', 'SomeMappingFunction'), $rows); 
     if (is_array($ignore) && count($ignore) > 0) { 
      /////// PROBLEM AFTER THIS LINE //////// 
      $result = array_filter($result, $ignorefunc); 
     } 
    } 
    return $result; 
} 

所以再次,如果我註釋掉array_filter我得到我想要的從json_encode無論somefunction返回,如果沒有我得到一個JSON對象。

如果我在var_dump$result之前和之後array_filter它是相同類型的PHP數組,鍵中沒有字符串等等。

回答

4

你想要一個array但你得到json對象,因爲你的陣列不從0使用array_values到陣列

重置例

$arr = array(1=>"a",2=>"Fish"); 
print(json_encode($arr)); 
print(json_encode(array_values($arr))); 

輸出

{"1":"a","2":"Fish"} 
["a","Fish"] 

更換試圖啓動

$result = array_filter($result, $ignorefunc); 

隨着

$result = array_filter($result, $ignorefunc); 
    $result = array_values($result); 
+0

謝謝!這工作;) – Johannes 2013-04-05 12:26:05

+0

不客氣.... – Baba 2013-04-05 12:27:44

+0

謝謝@Baba的答案,我有一個類似的問題,這解決了它! – ryanpitts1 2013-11-01 14:10:22