OOP vraagje
Dag PHP'ers,
ik heb een functie nodig die twee arrays met objecten met elkaar kan vergelijken en de verschillen als array teruggeeft. Dus array_diff maar dan de object variant, ik heb al een poosje gegoogled maar het mocht niet baten.
Op php.net/array_diff staat ook een object compare functie maar die werkt niet.
Weet iemand zo iets ?
Twan
ik heb een functie nodig die twee arrays met objecten met elkaar kan vergelijken en de verschillen als array teruggeeft. Dus array_diff maar dan de object variant, ik heb al een poosje gegoogled maar het mocht niet baten.
Op php.net/array_diff staat ook een object compare functie maar die werkt niet.
Weet iemand zo iets ?
Twan
Gewijzigd op 01/01/1970 01:00:00 door Twan van der Poel
Gesponsorde koppelingen:
Op basis van welke eigenschap wil je de objecten vergelijken? Kan op een property of op de hash. Voorbeeldje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Dag jelmer, ten eerste bedankt voor je reactie.
Ik heb een array met objecten erin die vergelijkt moeten worden op de eigenschap soort in combinatie met waarde.
En de functie dient alleen de verschillen als array te retourneren, welke anpak is het verstandigst en waarom ?
Twan
Ik heb een array met objecten erin die vergelijkt moeten worden op de eigenschap soort in combinatie met waarde.
En de functie dient alleen de verschillen als array te retourneren, welke anpak is het verstandigst en waarom ?
Twan
Ik denk deze:
De functie array_udiff zal alle items in de array met elkaar vergelijken op basis van de functie. Voor alle (nog bestaande) mogelijke combinaties wordt de functie array_udiff_callback aangeroepen (laatste argument van array_udiff) Wanneer deze callback 'true' teruggeeft komen de objecten overeen, en wordt er dus 1 weggedaan. Ik weet niet precies hoe het intern werkt, en in welke volgorden ze worden vergeleken.
Overigens, als het om private of protected eigenschappen gaat, dan kan je gebruik maken van een static method van de klasse van de objecten. Deze heeft immers wel toegang tot de protected/private properties:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function array_udiff_callback($a, $b) {
return $a->soort == $b->soort && $a->waarde == $b->waarde;
}
array_udiff($array1, $array2, 'array_udiff_callback');
?>
function array_udiff_callback($a, $b) {
return $a->soort == $b->soort && $a->waarde == $b->waarde;
}
array_udiff($array1, $array2, 'array_udiff_callback');
?>
De functie array_udiff zal alle items in de array met elkaar vergelijken op basis van de functie. Voor alle (nog bestaande) mogelijke combinaties wordt de functie array_udiff_callback aangeroepen (laatste argument van array_udiff) Wanneer deze callback 'true' teruggeeft komen de objecten overeen, en wordt er dus 1 weggedaan. Ik weet niet precies hoe het intern werkt, en in welke volgorden ze worden vergeleken.
Overigens, als het om private of protected eigenschappen gaat, dan kan je gebruik maken van een static method van de klasse van de objecten. Deze heeft immers wel toegang tot de protected/private properties:
He Jelmer,
duidelijk verhaal.
Bedankt voor je asistentie,
twan
duidelijk verhaal.
Bedankt voor je asistentie,
twan



