Если вы не хотите, чтобы они были перезаписаны, вам сначала нужно получить существующие свойства из источника HTML.
Затем вы можете либо проверить, установлены ли они уже, перед установкой нового, чтобы предотвратить перезапись, либо позже просто перезаписать их на значения по умолчанию.
Поскольку существующие свойства уже извлечены ранее, они могут работать как:
foreach($rule['properties'] as $key => $value)
if(!isset($properties[$key])) $properties[$key] = $value;
(это перезапишет NULL
свойства, в случае проблем используйте array_key_exists
вместо isset
).
Вы должны добавить флаг в класс / функцию, чтобы изменить поведение, чтобы текущее поведение не нарушалось, но вы делали свои потребности необязательными.
Редактировать: Так как может применяться несколько правил, следующее правило не будет перезаписывать что-либо из предыдущего правила (что должно, но предотвращено редактированием выше), поэтому для сохранения оригинала требуется больше контроля. свойства:
$originalProperties = $properties;
foreach($rule['properties'] as $key => $value) $properties[$key] = $value;
$properties = $originalProperties + $properties;
Редактировать 2: Второе предложение также не будет работать. По сути, необходимо получить очень оригинальные значения, потому что эта функция изменяет атрибут стиля, в то время как она перебирает правила и элементы. Один и тот же элемент может быть изменен дважды, поэтому $originalProperties
на самом деле не являются исходными свойствами, но могут быть изменены.
Возможно это работает с spl_object_hash
для создания согласованного идентификатора / ключа для каждого элемента, но я не уверен. Может быть, DomElement предлагает что-то сопоставимое внутри, но я не нашел такого (который должен подходить лучше). С определенным ключом / id для каждого конкретного элемента, только при первом появлении, могут быть сохранены очень оригинальные свойства:
$elementId = spl_object_hash($element);
if(!isset($originalProperties[$elementId]))
{
$originalProperties[$elementId] = $properties;
$originalElements[$elementId] = $element; // Needed to make spl_object_hash work
}
foreach($rule['properties'] as $key => $value) $properties[$key] = $value;
$properties = $originalProperties[$elementId] + $properties;