0

我有一个具有这种格式的数组:

array(
  info(
    Date-today => '09/04/2013'
  )
  clients(
    id => 1001,
    name => Fred
  )
  more_info(
    weather-today => "cloudy"
  )
)

但有时,我会收到更多客户的数据:

array(
  info(
    Date-today => '08/04/2013'
  )
  clients(
    0(
      id => 1001,
      name => Fred
    ),
    1(
      id => 1045,
      name => Fritz
    )
  )
  more_info(
    weather-today => "Sunny"
  )
)

我想计算我返回了多少个cients,因为如果只有一个或多个,我需要以不同的方式访问客户端数据。我尝试了几个“count()”选项,例如:

count(array['client'])

但是当然,如​​果只有 1 个客户端,它不会返回 1,而是返回 2(因为数组中有 2 项客户端数据)。

有小费吗?

4

2 回答 2

2

您必须找出是否$array['clients']只有数字索引:

$size = count($array['clients'];
if (count(array_filter(array_keys($array['clients']), 'is_int')) == $size) {
    return $size;
} else {
    return 1;
}

或者,使用一个数字索引的存在作为条件:

if (isset($array['clients'][0])) {
    return count($array['clients']);
} else {
    return 1;
}
于 2013-04-09T06:50:58.377 回答
0

如果您有一个类似数组的结构(作为示例中的客户端集合),您应该始终索引条目,即使只有一个条目。

这样你就不会遇到你描述的问题。

编辑:
没有看到你的评论。您可以先检查 $array['clients'] 是否有任何内容(通过 count())。
-> 如果没有,cnt = 0。
然后检查是否定义了 $array['clients']['0']。
-> 如果没有定义,cnt = 1。
-> 如果有,cnt = count()。

于 2013-04-09T06:50:05.870 回答