首页 > 解决方案 > Laravel Collections - 比较和检查一个单词在一个集合中出现的次数

问题描述

我是 Laravel 的新手,我正在尝试执行以下操作:我有 2 个集合:“要求”和“技能”:

$req = collect([
    'Installation',
    'Konfiguration',
    'Automatisierung' 
]);

$skills = collect([
    'Engineering Team',
    'Installation',
    'Konfiguration',
    'Konfiguration',
    'Automatisierung',
    'Security',
    'Automatisierung',
    'Automatisierung',
    'Automatisierung'
]);

我正在尝试以下操作:我想获取 $req 的第一项(“安装”)并计算它在 $skills 集合中存在的次数。然后我需要获取 $req 集合的第二个值并做同样的事情。最后,我需要一些输出,例如:

安装退出 2 次配置存在 2 次 Automatisierung 存在 3 次所有其他 -> 0(甚至忽略它)

我考虑过使用嵌套的 for 循环和 if 子句等进行迭代,例如“经典”编码,但是 laravel 中没有一些东西可以让它变得更好吗?我试过喜欢包含等等,但它就像“if”子句。

非常感谢提前

标签: phplaravel

解决方案


您可以使用 laravel 的 countBy,它取决于函数

在此处了解有关 countBy 的更多信息

此代码将返回另一个数组,其中包含您所说的 3 个句子

$req->map(function($i) use ($skills) {
    $count = $skills->countBy(function ($skill) use ($i) {
        return $skill == $i;
    });

    if (isset($count[1])) {
        return $i . " exits ". $count[1] ." times";
    } else {
        return $i . " doesn't exits";
    }
}); 

你也可以这样做$skills->countBy(),它会返回一个集合,其中键是技能的名称,值是它出现的次数


推荐阅读