2015-08-28 3 views
0

Мне нужно сравнить два массива, и если сравнить истинный результат набора в другом массиве. У меня есть объект Developer, у которого есть поле $ skills = array(); и у меня есть некоторая логика для поиска разработчика, у которого есть навыки в arrayskills. Мне нужно сравнить 100%. Если у разработчика 10 навыков, и я сравниваю для 4 навыков и всех 4 навыков, чтобы быть в разработчике навыков - установите этого разработчика в $ arrayResults. Помогите пожалуйстаSymfony createQueryBuilder array_diff

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

Не смотрите, что это действительно имеет отношение к Symfony. Похоже, что вы хотите, это array_intersect. – gview

+0

Я использую symfony и эту функцию в репозитории разработчика –

+1

Извините, мой комментарий не был заполнен. С помощью array_intersect вы получаете массив, в котором элементы пересекаются. Если вы возвращаетесь из array_intersect == $ skills, то это соответствие, основанное на том, что вы говорите. – gview

ответ

1

Конечно, но вы можете сделать это немного более компактно:

if (count($skills) === count(array_intersect($result->getSkills(), $skills))) { 
    $arrayResults[] = $result; 
} 
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; 
}