2013-07-27 69 views
0

濾波器陣列我有一個這樣的數組這是我從解析HTML源代碼有:我怎樣纔有效對象在PHP

Array 
(
    [0] => 12345 
    [1] => 54321 
    [2] => 32546 
    [3] => 98754 
    [4] => 15867 
    [5] => 75612 
) 

,如果我把它放在一個變量,並運行foreach循環前綴像這樣一個網址:

$x = Array; 
foreach ($x as $y){ 
$r = 'http://example.com/' . $y; 
echo $r . '<br>'; 
} 

它會像這樣的輸出:

http://example.com/12345 
http://example.com/54321 
http://example.com/32546 
http://example.com/98754 
http://example.com/15867 
http://example.com/75612 

而且每個輸出的URL,如果運行的兄弟wser將輸出的對象無論是這樣的:

{ 
    "key1": "value1", 
    "key2": "value2", 
    "key3": "value3" 
} 

OR這樣的:

{ 
    "error": { 
     "errorMessage": "errorMessageValue", 
     "errorType": "errorTypeValue" 
    } 
} 

所以我的問題是...我怎麼篩選PHP中的數組,這樣只會給我一個具有有效鍵/值對而不是錯誤對象的數組。

所建議的,我嘗試以下:

$x = Array; 
foreach ($x as $y){ 
$link = 'http://example.com' . $y; 
$json = file_get_contents($link); 
$array = array_filter((array)json_decode($json), "is_scalar"); 
echo '<pre>'; 
echo json_encode($array) . '<br>'; 
echo '</pre>'; 
} 

,但它仍然輸出相同的數組,並且不排除錯誤對象。

+1

請添加額外信息,在哪裏生成該數組?除非第二個參數設置爲true – 2013-07-27 00:35:29

回答

4
$array = array_filter((array)json_decode($json), "is_scalar"); 

這將排除數組中的所有對象,並且只有key =>值對,其中value不是對象也不是數組。

+1

json_decode返回一個對象,我得到'注意:數組字符串conversion'試圖使用'file_get_contents'得到時'$ json'工作,然後回顯'$ array' – Martin

+0

@馬丁沒關係,加入數組轉換使用您的代碼;-) – bwoebi

+0

@bwoebi – anagnam

0

也許我失去了一些東西,但你不能只檢查是否返回的對象包含一個「錯誤」條目,如果是這樣,跳過?

$x = Array; 
foreach ($x as $y){ 
    $link = 'http://example.com' . $y; 
    $json = file_get_contents($link); 
    $returned_data = json_decode($json, true); 

    // If returned data contains an "error" entry, just move to next one 
    if(isset($returned_data['error'])) { 
    continue; 
    } 
    echo '<pre>'; 
    echo json_encode($returned_data) . '<br>'; 
    echo '</pre>'; 
}