array_unique optional compare-callback proposal

From: Date: Thu, 07 Nov 2013 13:24:44 +0000
Subject: array_unique optional compare-callback proposal
Groups: php.internals 
Request: Send a blank email to internals+get-70060@lists.php.net to get a copy of this message
Hello,

I would like to propose addition of a third (optional) argument for array_unique which will be callback for comparing elements.

There's a plenty of usecases for this. For example, what I've been dealing with can be described like so:

<?php

$obj1 = new EntityName("asd");
$obj2 = new EntityName("qwe");

$a = [new EntityWrapper($obj1, ...), new EntityWrapper($obj2, ...), new EntityWrapper($obj1, ...)];

// now it can be solved like so:

$newArray = [];
foreach ($a as $e) {
    $newArray[$e->getWrappedObject()->getIdentity()] = $e;
} // but with this patch it can be solved with array_unique: $newArray = array_unique($a, SORT_USERDEFINED, function ($a, $b) {
    return $a->getWrappedObject()->getIdentity() - $b->getWrappedObject()->getIdentity();
}); Actually my problem was a little different but you get the idea... And I think there will be even more usecases for this. Here's a patch for master branch with implementation of this proposal: https://gist.github.com/nikita2206/7354392

Thread (4 messages)

« previous php.internals (#70060) next »