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

@milo milo force-pushed the pull-array-diff branch from f4bd8a6 to 6ffdb09 Compare January 7, 2021 20:41
@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 4 times, most recently from 740520b to 2bc2f58 Compare January 11, 2021 03:06
@dg dg force-pushed the master branch 11 times, most recently from eb3a987 to adead06 Compare March 4, 2021 20:13
@dg dg force-pushed the master branch 3 times, most recently from c5fe864 to f06376c Compare April 22, 2021 16:23
@dg dg force-pushed the master branch 2 times, most recently from 1d3a574 to f857e45 Compare August 16, 2021 21:07
@dg dg force-pushed the master branch 2 times, most recently from 2aa5187 to 9f1c637 Compare August 24, 2021 11:32
@dg dg force-pushed the master branch 12 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
@dg dg force-pushed the master branch 2 times, most recently from cd9170e to 2b48b24 Compare December 12, 2024 10:02
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