计算子数组的元素

问题描述 投票:0回答:4

在 Count() 的返回值下

返回 var 中的元素数量。如果 var 不是数组或实现了 Countable 接口的对象,则返回 1。有一个例外,如果 var 为 NULL,将返回 0。

我有一个充满字母和数字的字符串,我使用 preg_match_all() 来提取这些数字。我记得 preg_match_all 用结果填充第三个参数中给出的数组内容。为什么返回1?

我的代码做错了什么?

$string = "9hsfgh563452";
preg_match_all("/[0-9]/",$string,$matches);

echo "Array size: " . count($matches)."</br>"; //Returns 1
echo "Array size: " . sizeof($matches)."</br>"; //Returns 1
print_r($matches);

我想对数组的内容求和(即字符串中返回的所有数字) array_sum() 不起作用;它是一个字符串数组,我不知道如何将其转换为 int 数组,因为我没有使用任何分隔符,如 ' , ' 等。有更有效的方法吗?

php arrays counting
4个回答
4
投票

计数为 1,因为

$matches
是一个数组,其中包含另一个数组。具体来说,
$matches[0]
是一个数组,其中包含第零个捕获组(整个正则表达式)的每个匹配项。

也就是说,

$matches
看起来像这样:

Array
(
    [0] => Array  // The key "0" means that matches for the whole regex follow
        (
            [0] => 9   // and here are all the single-character matches
            [1] => 5
            [2] => 6
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 2
        )

)

3
投票

preg_match_all
的结果实际上是数组的数组:

Array
(
    [0] => Array
        (
            [0] => 9
            [1] => 5
            [2] => 6
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 2
        )
)

所以你需要做类似的事情:

echo "Array size: " . count($matches[0]);

echo "Array sum: " . array_sum($matches[0]);

0
投票

这是由于 preg_match_all 返回结果的方式造成的。它的主要数组元素是 preg 括号(表达式匹配),而它们的内容是您匹配的内容。

在你的情况下,你没有子表达式。因此,该数组将只有一个元素 - 并且该元素将包含所有数字。

总结一下,只需这样做:

$sum = 0;
$j = count($matches[0]);
for ($i = 0; i < $j; ++$i) {
  $sum += (int)$matches[0][$i];
}

0
投票

尝试使用 $matches[0] 而不是 $matches(返回 7)。

如果你想对所有数字求和,你可以使用 foreach 函数

© www.soinside.com 2019 - 2024. All rights reserved.