【问题标题】:PHP, Looping through mulitple arrays - some arrays only have 1 result [duplicate]PHP,循环遍历多个数组-某些数组只有1个结果[重复]
【发布时间】:2020-10-19 06:48:54
【问题描述】:

我正在使用 Zillow API 返回对代理列表的评论。我有一个foreach 循环,然后拉出每个代理的评论列表。该列表以 JSON 形式返回。然后我在 JSON 结果上运行foreach 循环以单独显示评论。一切都很好,除了一个特定的代理只有 1 条评论并且它抛出了 foreach 错误。

这是一个非常简单的返回示例:

如果代理有多个评论:

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

如果代理只有一条评论:

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

我曾尝试使用count(),但在只有 1 条评论的数组上,由于没有索引,它会计算总键数。

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

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

【问题讨论】:

  • 您可以像这样防止foreach错误:foreach((array) $array as $item)
  • 我仍然收到错误:“非法字符串偏移”

标签: php multidimensional-array associative-array


【解决方案1】:

如果您只有一条评论,则密钥 reviewer 存在。因此,如果您只有一个或多个,可以使用函数array_key_exists 进行检查。

试试这个代码示例:

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

【讨论】:

  • 确保您处理评论的代码是一个函数,否则您可以在 2 个处理评论数据的地方结束。
【解决方案2】:

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

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

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

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

这意味着所有版本都是 foreach 的评论数组。

【讨论】:

  • 没想到!这也行!
【解决方案3】:

尝试检查是否是多维数组,使用count($agent, 1);,它会递归计算数组。 因此,如果count($agent, 1); 小于 3,则 $agent 有一条评论。

$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
}

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 2019-07-10
    • 2017-09-12
    • 2011-08-28
    • 2016-08-24
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多