我很难理解为什么数组计数输出的结果没有任何意义。 我有以下代码来计算数组项目
echo $arrayLength = count($result['GetRecentCasesResult']['CaseHistory'])
现在,当数组包含以下内容时:
Array (
[caseNumber] => CAS-00477-Z7Z9N6
[dateCreated] => 18-02-2016 21:58
[faultType] => Cable theft notification
[status] => Open [lastStatusChange] => Un-known
)
我得到上述数组的计数结果为 5但是对于下面的数组,我得到的计数为 2:
Array ( [0] => Array ( [caseNumber] => CAS-00475-H3Z4W4
[dateCreated] => 18-02-2016 21:22
[faultType] => Electricity outage - Business
[status] => Open
[lastStatusChange] => Un-known
)
[1] => Array ( [caseNumber] => CAS-00476-F2N7H4
[dateCreated] => 18-02-2016 21:22
[faultType] => Electricity outage - Business
[status] => Open
[lastStatusChange] => Un-known )
)
我意识到,当超过 1 个项目时,数组的显示方式与两个或更多项目时的显示方式不同。有没有办法标准化计数?
两个数组结果都来自 SOAP API 结果集
count
返回顶级数组中的项目数,因此您看到的行为是正确的。
似乎潜在的问题是你正在处理的是,当有多个结果时,你会得到一系列结果。如果只有一个结果,你只会得到那个结果。
您可以通过检查是否设置了特定键来测试这一点:
if(isset($result['GetRecentCasesResult']['CaseHistory']['caseNumber'])) {
// Single result
} else {
// Multiple results
}
您还可以规范化响应,以便无论是否存在多个结果,都可以以相同的方式处理它:
if(isset($result['GetRecentCasesResult']['CaseHistory']['caseNumber'])) {
$result['GetRecentCasesResult']['CaseHistory'] = [ $result['GetRecentCasesResult']['CaseHistory'] ];
}
以上将确保您始终获得一系列结果。
你的第二个结果是计算外部数组,可以说是数组的数组。
遍历数组并每次对值数组进行计数。需要示例吗?
foreach ($secondExample as $key => $valueArray)
echo count($valueArray) . PHP_EOL;
函数count
只计算数组中的项目。
在这里 - 您有 5 件商品:
Array (
[caseNumber] => CAS-00477-Z7Z9N6 // 1st
[dateCreated] => 18-02-2016 21:58 // 2bd
[faultType] => Cable theft notification // 3rd
[status] => Open // 4th
[lastStatusChange] => Un-known // 5th
)
在这里 - 只有两个:
Array (
// FIRST
[0] => Array ( [caseNumber] => CAS-00475-H3Z4W4
[dateCreated] => 18-02-2016 21:22
[faultType] => Electricity outage - Business
[status] => Open
[lastStatusChange] => Un-known
)
// SECOND
[1] => Array ( [caseNumber] => CAS-00476-F2N7H4
[dateCreated] => 18-02-2016 21:22
[faultType] => Electricity outage - Business
[status] => Open
[lastStatusChange] => Un-known )
)
)
通常,count
不计算子数组中的项目,但您可以将1
(或COUNT_RECURSIVE
)作为第二个参数传递给 count
并获取第二个数组的结果12
。
因此,您可以通过检查数组中是否存在caseNumber
键来解决问题。如果没有 - 您应该迭代子数组。或者,您可以count
带有第二个参数和不带第二个参数的项目。它的值是不同的 - 同样,您应该遍历子数组。
但最合适的解决方案 - 是修复 SOAP 提供程序(如果可以的话),以便它始终返回数组数组。