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

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

Объект:

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

Что я делаю, так это назначаю 2 человека их навыкам. Человек А & 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, а также кажется случайным, когда Skills назначаются параметрам внутри вызываемой функции.

$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.

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

1

Решение

Вы получаете два объекта в функции 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') верно. Но если использовать 3-й аргумент в качестве ‘SkillIDComparison’, все работает нормально

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]