PHP. Подсчет количества строк, удовлетворяющих заданному условию c в цикле foreach - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь найти количество строк, которые удовлетворяют некоторым условиям в foreach l oop. Это то, что я пробовал до сих пор:

<?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 count($n); возвращает 11111 вместо того, чтобы возвращать 5, то есть значение, которое я хочу получить.

Может кто-нибудь помочь меня немного?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Если вы хотите добиться того же с более функциональным и элегантным способом, вы можете использовать array_reduce

array_reduce($item->getProperty(), function($sum, $single) {
    if (strpos($single->getPropertyName(), 'foo') === 0) {
        $sum++;
    }
    return $sum;
});

Менее читаемое, но более элегантное однострочное решение будет выглядеть так:

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

И теперь, когда у нас есть функции коротких стрелок в PHP, вы можете использовать это, если вы работаете на PHP 7.4:

array_reduce($item->getProperty(),
    fn($sum, $single) => (strpos($single->getPropertyName(), 'foo') === 0) ? ++$sum : $sum);
1 голос
/ 03 февраля 2020
<?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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...