相同的计数数组代码,给出不同的规则


same count array code, giving different resuls

我很难理解为什么数组计数输出的结果没有任何意义。 我有以下代码来计算数组项目

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 提供程序(如果可以的话),以便它始终返回数组数组。