Skip to content

Arrays::updateDiff()#246

Open
milo wants to merge 2 commits intonette:masterfrom
milo:pull-array-diff
Open

Arrays::updateDiff()#246
milo wants to merge 2 commits intonette:masterfrom
milo:pull-array-diff

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 23 times, most recently from 6e141fd to 5b20c84 Compare September 19, 2021 23:53
@dg dg force-pushed the master branch 5 times, most recently from 3fb2048 to 2680b18 Compare September 24, 2021 09:45
@dg dg force-pushed the master branch 2 times, most recently from 8d59ee6 to 75af0ff Compare October 11, 2021 10:51
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