PHP,遍历多个数组 - 一些数组只有 1 个结果

PHP, Looping through mulitple arrays - some arrays only have 1 result

我正在使用 Zillow API 对代理列表进行 return 评论。我有一个 foreach 循环,然后提取每个代理的评论列表。该列表被 return 编辑为 JSON。然后我 运行 在 JSON 结果上循环 foreach 以单独显示评论。一切都很好,除了一个特定的代理只有 1 个评论并且它抛出 foreach 错误。

这是一个非常简单的例子return:

如果代理有多个评论:

array(
    [0] => Array (
        [reviewer] => name,
        [reviewerLink] => link
    ),
    [1] => Array (
        [reviewer] => name,
        [reviewerLink => link
    )
)

如果代理只有一个评论:

array([reviewer] => name [reviewerLink] => link)

我试过使用 count(),但是在只有 1 个评论的数组中,它计算了总键数,因为没有索引。

我需要一种简单的方法来区分数组,因此我不会在只有 1 个评论的代理上使用 foreach 循环。

有没有办法强制数组有索引?或者另一种区分数组的方法?

如果您只有一篇评​​论,则关键字 reviewer 存在。所以如果你只有一个或多个,你可以用函数array_key_exists检查它。

试试这个代码示例:

if (array_key_exists('reviewer', $array)) {
  // only one review
} else {
  // more reviews
  // do the foreach
}

根据documentation,有一个reviewCount字段作为结果集的一部分,所以在foreach之前检查这个,如果只有一项则将其转换为数组...

if ( $json['reviewCount'] == 1 )  {
    $array = [$array];
}

或者如果您的 json 是一个对象...

if ( $json->reviewCount == 1 )  {
    $array = [$array];
}

这意味着所有版本都是 foreach 的一系列评论。

尝试判断是否为多维数组,使用count($agent, 1);,会递归计算数组。 因此,如果 count($agent, 1); 小于 3,则 $agent 有 1 个评论。

$ag1 =[
  0 =>[
    'reviewer' => 'name',
    'reviewerLink' => 'link'
  ],
  1 =>[
    'reviewer' => 'name',
    'reviewerLink' => 'link'
  ]
];

$ag2 =[
  'reviewer' => 'name',
  'reviewerLink' => 'link'
];

echo count($ag1, 1);  // 6
echo count($ag2, 1);  // 2

只需检查:

if (count($agent, 1) <3) {
  // only one review
} else {
  // more reviews
  // do the foreach
}