如何在php中仅使用有效对象过滤数组

时间:2013-07-27 00:31:51

标签: php json

我有一个这样的数组,我从解析html源代码得到了:

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

如果我把它放在一个变量中并运行一个foreach循环前缀一个url,如下所示:

$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如果在浏览器中运行,将输出一个像这样的对象:

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

或者像这样:

{
   "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>';
}

但它仍然输出相同的数组,并且不排除错误对象。

2 个答案:

答案 0 :(得分:4)

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

这将排除数组中的所有对象,并且只有key =&gt; value对,其中value既不是对象也不是数组。

答案 1 :(得分: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>';
}