nette / utils

🛠 Lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.
https://doc.nette.org/utils
Other
1.98k stars 147 forks source link

Arrays::updateDiff() #246

Open milo opened 3 years ago

milo commented 3 years ago

Proposed Arrays::updateDiff() compares two associative arrays and returns such items from later one, which does not exist or differs from first one. By other words - which items have to be updated in first array, to be the same as second array.

As far as I know, there is no PHP function for that (playground). For examle:

$from = ['a' => null];
$to = ['a' => false];

# I didn't find a PHP function which returns
$diff = ['a' => false];

There are posible things to debate:

JanTvrdik commented 3 years ago

So it's like array_diff_assoc but with strict comparision?

milo commented 3 years ago

Yes. Behaviour probably same as:

return array_udiff_assoc($to, $from, function ($a, $b) {
    return $a === $b ? 0 : ($a > $b ? 1 : -1);  # spaceship cannot be used because null <=> false === 0
});

I write probably, because I'm not sure why yes/no comparator can return -1/0/1 and how result depends on it. And the foreach loop is ~3 times faster.