2012-06-14 5 views
0

Как сравнить два массива и просмотреть общие элементы в третьем массиве. Я хочу напечатать третий массив. Пожалуйста, помогите парням. Мои результаты идут в двух списках.CAKEPHP: Как сравнить общие элементы между двумя массивами

<?php 

    $appsubjects = $this->ProgrammeChoice-> 
    ApplicantsDetail->ApplicantAlevelQualification-> 
    find('list',array('fields'=> array('subject_code'), 
    'conditions'=>array('ApplicantAlevelQualification.applicants_detail_id'=>$app_id))); 

    $progrequirements[] = 
      $this->ProgrammeChoice->Programme->ProgrammeRequirementsSubject-> 
    find('all',array('fields'= >  array('programme_code','subject_code','programme_name','compulsory'), 
    'conditions'=> 
    array('subject_code'=>$s_code,'compulsory'=>'true'))); 

?> 

Так что теперь я не знаю, как получить 3-й список элементов, для которых subject_code одинакова для Array (1) и Array (2), где compulsory верно.

Суть моей программы в том, что я хочу, чтобы заявители вошли в свои предметы, подавая заявки на различные программы степени. Затем для каждой степени требуются предметы, которые требуются (Array (2)), а некоторые являются обязательными. Поэтому моя программа должна иметь возможность перечислять программы всех степеней, которые соответствуют введенным предметам. Надеюсь, ты понимаешь мой вопрос. Пожалуйста, помогите, я застрял.

+0

Можете ли вы разместить несколько примеров массивов того, что у вас есть и чего вы ожидаете получить? Звучит как задание для 'array_intersect'. – jeremyharris

+0

$ appsubjects = $ this-> ProgrammeChoice-> ApplicantsDetail-> ApplicantAlevelQualification-> find ('list', array ('fields' => array ('subject_code'), 'conditions' => array ('ApplicantAlevelQualification.applicants_detail_id' => $ app_id))); –

+0

$ progrequirements [] = $ this-> ProgrammeChoice-> Programme-> ProgrammeRequirementsSubject-> find ('all', array ('fields' => array ('programme_code', 'subject_code', 'programme_name', 'обязательный') 'условия' => Array ('subject_code' => $ s_code, 'обязательное' => 'истина'))); –

ответ

0

Если я понял, я думаю, что вы делаете это неправильно. Вы делаете два запроса к базе данных, после чего вы хотите найти общие элементы. Как это сделать непосредственно в запросе? :) Есть ли какая-то веская причина не делать этого?

Редактировать: или сделать третий запрос после того, как пользователь что-то подал. некоторые ajax и voilá.

0

Я не собираюсь рассказывать, почему вы можете сравнить массивы или нет. Но на самом деле навыки манипуляции с массивами всегда могут пригодиться.

CakePHP имеет класс Set Array Management. Для поиска различий в массивах вам может понадобиться функция Set::diff. Он «вычисляет разницу между множеством и массивом, двумя наборами или двумя массивами». Следующий пример из CakePHP 2.0 книги:

<?php 
    $a = array(
     0 => array('name' => 'main'), 
     1 => array('name' => 'about') 
    ); 
    $b = array(
     0 => array('name' => 'main'), 
     1 => array('name' => 'about'), 
     2 => array('name' => 'contact') 
    ); 

    $result = Set::diff($a, $b); 
    /* $result now looks like: 
     Array 
     (
      [2] => Array 
       (
        [name] => contact 
       ) 
     ) 
    */ 
    $result = Set::diff($a, array()); 
    /* $result now looks like: 
     Array 
     (
      [0] => Array 
       (
        [name] => main 
       ) 
      [1] => Array 
       (
        [name] => about 
       ) 
     ) 
    */ 
    $result = Set::diff(array(), $b); 
    /* $result now looks like: 
     Array 
     (
      [0] => Array 
       (
        [name] => main 
       ) 
      [1] => Array 
       (
        [name] => about 
       ) 
      [2] => Array 
       (
        [name] => contact 
       ) 
     ) 
    */ 

    $b = array(
     0 => array('name' => 'me'), 
     1 => array('name' => 'about') 
    ); 

    $result = Set::diff($a, $b); 
    /* $result now looks like: 
     Array 
     (
      [0] => Array 
       (
        [name] => main 
       ) 
     ) 
    */ 
?> 

Набор также имеет другие мощные утилиты, которые я предлагаю вам проверить. Я использую его все время, когда пользовательские манипуляции с данными необходимы на стороне уровня БД.

Смежные вопросы