Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arrays::updateDiff() #246

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Arrays::updateDiff() #246

wants to merge 2 commits into from

Conversation

milo
Copy link
Member

@milo milo commented Jan 7, 2021

  • new feature
  • BC break? no
  • doc PR: will

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:

  • function name
  • arguments order
  • recursive version
  • objects comparing
  • 3rd argument callable $comparator = null

@JanTvrdik
Copy link
Contributor

So it's like array_diff_assoc but with strict comparision?

@milo
Copy link
Member Author

milo commented Jan 8, 2021

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.

@dg dg force-pushed the master branch 14 times, most recently from 6733224 to 5de10a1 Compare June 18, 2024 21:22
@dg dg force-pushed the master branch 16 times, most recently from a846fab to 736c567 Compare August 7, 2024 16:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants