Symfony createQueryBuilder array_diff

时间:2015-08-28 07:59:36

标签: php arrays symfony

我需要比较两个数组,如果比较另一个数组中的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;
}

2 个答案:

答案 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;
}