2015-08-28 71 views
0

我需要比較兩個數組,如果比較真正的設置結果在另一個數組中。我有實體開發人員有$ field = array();我有一些邏輯可以幫助查找有陣列技能的開發人員。我需要比較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 == $技能返回,那麼這是一個匹配,根據你的意思。 – 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; 
}