在Count()的返回值下
返回var中的元素数。如果var不是数组或具有已实现Countable接口的对象,则将返回1。有一个例外,如果var为NULL,则返回0。
我有一个用字母和数字填充的字符串,我使用preg_match_all()来提取这些数字。我记得preg_match_all用结果填充第3个参数中给出的数组的内容。为什么它会返回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数组,因为我没有使用任何分隔符,如','等。这样做有更有效的方法吗?
帮助表示赞赏。
答案 0 :(得分: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
)
)
答案 1 :(得分: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]);
答案 2 :(得分:0)
这是由于preg_match_all返回结果的方式。它的主要数组元素是preg括号(表达式匹配),而它们的内容是你匹配的。
在您的情况下,您没有子表达式。因此,该数组只有一个元素 - 该元素将包含您的所有数字。
总结一下,只需这样做:
$sum = 0;
$j = count($matches[0]);
for ($i = 0; i < $j; ++$i) {
$sum += (int)$matches[0][$i];
}
答案 3 :(得分:0)
尝试使用$ matches [0]而不是$ matches(返回7)。
然后,如果你想总结所有数字,你可以使用foreach函数