PHP。计算foreach循环中满足特定条件的字符串数

PHP。计算foreach循环中满足特定条件的字符串数,php,foreach,count,Php,Foreach,Count,我试图在foreach循环中找到满足某些条件的字符串数。这就是我迄今为止所尝试的: <?php $list = $item->getProperty(); $n = 0; foreach($list as $single) { $designation = $single->getPropertyName(); // var_dump($designation); outputs 150 strings if (strpos($designation, 'foo

我试图在
foreach
循环中找到满足某些条件的字符串数。这就是我迄今为止所尝试的:

<?php
$list = $item->getProperty();
$n = 0;
foreach($list as $single) {
    $designation = $single->getPropertyName(); // var_dump($designation); outputs 150 strings
    if (strpos($designation, 'foo') === 0) { // var_dump($designation); outputs 5 strings containing 'foo' in their designation names
        $n++;
        echo count($n); 
    }
}
?>

echo计数($n)
返回
11111
而不是返回
5
,这是我想要获得的值


有人能帮我一点忙吗?

如果您想以更实用、更优雅的方式实现同样的功能,您可以使用

<?php
$list = $item->getProperty();
$n = 0;
foreach($list as $single) {
    $designation = $single->getPropertyName(); // var_dump($designation); outputs 150 strings
    if (strpos($designation, 'foo') === 0) { // var_dump($designation); outputs 5 strings containing 'foo' in their designation names
        $n++;
    }
}
echo $n;
可读性较差但更优雅的单线解决方案如下所示:

array_reduce($item->getProperty(), function($sum, $single) { return (strpos($single->getPropertyName(), 'foo') === 0) ? ++$sum : $sum; }
现在我们有了,如果您运行的是PHP 7.4,您可以使用它:

array_reduce($item->getProperty(),
    fn($sum, $single) => (strpos($single->getPropertyName(), 'foo') === 0) ? ++$sum : $sum);

如果您想以更实用、更优雅的方式实现同样的功能,您可以使用

可读性较差但更优雅的单线解决方案如下所示:

array_reduce($item->getProperty(), function($sum, $single) { return (strpos($single->getPropertyName(), 'foo') === 0) ? ++$sum : $sum; }
现在我们有了,如果您运行的是PHP 7.4,您可以使用它:

array_reduce($item->getProperty(),
    fn($sum, $single) => (strpos($single->getPropertyName(), 'foo') === 0) ? ++$sum : $sum);
1) 您正在对整数(它需要一个数组)使用
count
(函数)<代码>$n
已经是您的计数。2) 您希望在循环后检查/显示其值,而不是在每次迭代时。1)您正在整数上使用
count
(函数)(它需要一个数组)<代码>$n已经是您的计数。2) 您希望在循环后检查/显示其值,而不是在每次迭代时。