Динамический массив & Array_unintersect_assoc () || Array_unintersect ()

1

Возникли проблемы с попыткой сравнить с динамическими массивами объектов.

Объект:

class Skill
{
    public $SkillID;
    public $Profficiency;
    public $Required;
    public $Source;

    public function __construct($SkillID,$Prof,$Req,$Src){
        $this->SkillID = $SkillID;
        $this->Profficiency = $Prof;
        $this->Required = $Req;
        $this->Source = $Src;
    }
}

То, что я делаю, назначает двум людям свои навыки. Человек A & B может иметь любое количество Навыков. Skill :: Source идентифицирует его от человека A через логическое.

$SkillMatches = array_uintersect_assoc($this->Person_A->Skills,$this->Person_B->Skills,array($this, 'SkillIDComparison'));

private function SkillIDComparison($Skill_A,$Skill_B){
    print_r($Skill_A);
    echo '<br>';
    print_r($Skill_B);
    echo '<br>';
    echo '<br>';
    if ($Skill_A === $Skill_B) {
        return 0;
    } elseif ($Skill_A > $Skill_B) {
        return 1;
    } else {
        return -1;
    }
}

Моя проблема заключается в том, что если у Person_A есть 5 навыков, а Person_B имеет 2 навыка, Array_uintersect_assoc(), не проверяет все 5 навыков Person_A

Skill Object ( [SkillID] => 6 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 
Skill Object ( [SkillID] => 3 [Profficiency] => 2 [Required] => 0 [Source] => ) 

Skill Object ( [SkillID] => 7 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 
Skill Object ( [SkillID] => 5 [Profficiency] => 2 [Required] => 1 [Source] => ) 

Теперь, если я использую Array_uintersect(), когда вызываемая функция вызывается, она не присваивает Person_A :: Skills значениям $ Skill_A и Person_B :: Skills до $ Skill_B, а также кажется случайным, когда навыки присваиваются параметрам внутри функции Callable.

$SkillMatches = array_uintersect($this->Person_A->Skills,$this->Person_B->Skills,array($this, 'SkillIDComparison'));

Skill Object ( [SkillID] => 7 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 
Skill Object ( [SkillID] => 6 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 

Skill Object ( [SkillID] => 8 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 
Skill Object ( [SkillID] => 7 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 

Skill Object ( [SkillID] => 5 [Profficiency] => 2 [Required] => 1 [Source] => ) 
Skill Object ( [SkillID] => 3 [Profficiency] => 2 [Required] => 0 [Source] => ) 

Skill Object ( [SkillID] => 6 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 
Skill Object ( [SkillID] => 3 [Profficiency] => 2 [Required] => 0 [Source] => ) 

Skill Object ( [SkillID] => 6 [Profficiency] => 1 [Required] => 0 [Source] => 1 ) 
Skill Object ( [SkillID] => 5 [Profficiency] => 2 [Required] => 1 [Source] => ) 

как вы можете видеть здесь в половине случаев, когда функция называется ее даже не сравнивая с двумя разными людьми. Только последние два вызова фактически сравнивают Person_A и Person_B.

Любая помощь будет оценена, спасибо.

Теги:
object
arrays
oop
array-intersect

1 ответ

0

Вы получаете два объекта в функции SkillIDComparison. И если вы хотите сравнить свойства SkillID, возьмите их с помощью $Skill_A->SkillID.

Итак, измените все следующие строки

if ($Skill_A === $Skill_B) {
    return 0;
} elseif ($Skill_A > $Skill_B) {
    return 1;
} else {
    return -1;
}

от

return $Skill_A->SkillID - $Skill_B->SkillID;

Используйте array_uintersect потому что вы хотите сравнивать значения, но ключи.

Я не знаю, правильно ли этот array($this, 'SkillIDComparison') построения array($this, 'SkillIDComparison'). Но если использовать третий аргумент как "SkillIDComparison", все работает нормально

  • 0
    Внимательно посмотрите на мой вопрос и результаты, которые я предоставил. Моя проблема не в сравнении внутри SkillIDComparison, а в том, что представлено этой функции, взглянем на второй результат. Source = 1 означает, что это было от Person A. так что означает, что для первых двух вызовов функции person a сравнивается с самим собой
  • 0
    а также 3-й вызов, как он сопоставляет человека б против человека б.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню