Created
February 2, 2019 16:21
-
-
Save kellenmace/77f55e70a06cec7a3a61b7cd6f8a3081 to your computer and use it in GitHub Desktop.
If you have an indexed array of objects, and you want to remove duplicates by comparing a specific property in each object, a function like the remove_duplicate_models() one below can be used.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Car { | |
private $model; | |
public function __construct( $model ) { | |
$this->model = $model; | |
} | |
public function get_model() { | |
return $this->model; | |
} | |
} | |
$cars = [ | |
new Car('Mustang'), | |
new Car('F-150'), | |
new Car('Mustang'), | |
new Car('Taurus'), | |
]; | |
function remove_duplicate_models( $cars ) { | |
$models = array_map( function( $car ) { | |
return $car->get_model(); | |
}, $cars ); | |
$unique_models = array_unique( $models ); | |
return array_values( array_intersect_key( $cars, $unique_models ) ); | |
} | |
print_r( remove_duplicate_models( $cars ) ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@amrography Glad to hear it :)
Yes, I would leave in the
array_values()
. Without that, the array indices of the example above end up being 0, 1, and 3.array_values()
serves as a reset for the indices, so if you include it, they end up being 0, 1, and 2.