我需要比较两个数组,如果比较另一个数组中的true set结果。我有实体开发人员有字段$ skills = array();我有一些逻辑可以找到具有数组技能技能的开发人员。我需要比较100%。如果开发人员有10项技能,我将4项技能与技能开发人员的4项技能进行比较 - 将此开发人员设置为$ arrayResults。请帮忙
public function findBySkills($skills)
{
$date = new \DateTime;
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle:Developer', 'd')
->getQuery();
$query = $qb->getQuery();
$results = $query->getResult();
$arrayResults = array();
foreach ($results as $result) {
if(!$result->getSkills()) {
$arrayResults[] = $result;
} else {
if (is_array($result->getSkills())) {
$find = array_diff($result->getSkills(), $skills);
}
}
}
return $arrayResults;
}
答案 0 :(得分:1)
当然可以更紧凑地做到这一点:
if (count($skills) === count(array_intersect($result->getSkills(), $skills))) {
$arrayResults[] = $result;
}
答案 1 :(得分:0)
我想我解决了我的问题
public function findBySkills($skills)
{
$count_skills = count($skills);
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle:Developer', 'd')
->getQuery();
$query = $qb->getQuery();
$results = $query->getResult();
$arrayResults = array();
foreach ($results as $result) {
if(!$result->getSkills()) {
$arrayResults[] = $result;
} else {
if (is_array($result->getSkills())) {
$find = array_intersect($result->getSkills(), $skills);
if(count($find) == $count_skills){
$arrayResults[] = $result;
}
}
}
}
return $arrayResults;
}