У меня есть переменная, которая состоит из 2 массивов: old
а также new
, Так как мне нужно манипулировать обоими одинаково, я обнаружил, что я дублирую большинство строк с небольшими изменениями.
Чтобы дать вам представление, вот несколько разделов кода:
$old = json_decode($item['old']);
$new = json_decode($item['new']);
...
$diff['old'] = array_map($combineCallback, $bypassDiff ? $oldValues : array_diff($oldValues, $newValues));
$diff['new'] = array_map($combineCallback, $bypassDiff ? $newValues : array_diff($newValues, $oldValues));
...
if($keys == array('id')){
$item['old'] = array_map($combineCallback, $old);
$item['new'] = array_map($combineCallback, $new);
}
...
$items['old'] = $excludeCallback($items['old']);
$items['new'] = $excludeCallback($items['new']);
Я долго разбирался в этом, и это действительно имеет смысл оставить так, потому что я думаю, что это читабельно, но это как-то раздражает меня из-за того, что я делаю любые виды дублирования. Есть ли способ сделать это таким образом, чтобы избежать дублирования, используя что-то вроде этого:
public $keys = ['new', 'value'];
public function call(&$item, $callback)
{
foreach ($this->keys as $key) {
$callback($item[$key]);
}
}
Я, однако, не уверен, что это на самом деле увеличит читабельность кода и сделает прямо противоположное?
Задача ещё не решена.
Других решений пока нет …