public static function remove($entity, $property, $value, array $fns, $getter = null, $setter = null)
{
list($getter, $setter) = self::resolveFunctionNames($property, $getter, $setter);
$arr = $entity->{$getter}();
if (!$arr) {
return;
}
$local_values = [];
foreach ($fns as $fn_index => $fn) {
$local_values[$fn_index] = $value->{$fn}();
}
foreach ($arr as $item_index => $item) {
foreach ($fns as $fn_index => $fn) {
if ($local_values[$fn_index] !== $item->{$fn}()) {
continue 2;
}
}
unset($arr[$item_index]);
$entity->{$setter}(array_values($arr));
}
}