Item bij waarde verwijderen uit array

Door 8 januari 2013Tips & Trucs

Een simpel truukje om zoals de titel al aangeeft, een item bij zijn waarde te verwijderen uit een array. Daarbij eerst even een voorbeeld array:

$array = ['test1','test2','test3','test4'];

Stel we willen nu een item hieruit verwijderen (test3) kunnen we dit doen middels unset:

unset($array[2]);

Maar, dan moeten we wel de key weten! In dit geval is 2 gelijk aan “test3”, gezien er geteld wordt vanaf 0. Dat kunnen we zien als we de array dumpen middels var_dump:

array(4) {
	[0]=>
	string(5) "test1"
	[1]=>
	string(5) "test2"
	[2]=>
	string(5) "test3"
	[3]=>
	string(5) "test4"
}

Maar als we de key niet weten? Dan kunnen we door de array lo(o)pen zoals het onderstaande voorbeeld. Andere opties zijn met array_search of array_keys aan de gang.

foreach($array as $key => $value)
{
	if($value == 'test3')
	{
		unset($array[$key]);
	}
}

Maar wat ik het makkelijkste vindt én op één regel past is de methode met array_diff!

$array = array_diff($array, array('test3'));

Wat nu wel het geval is; het item is verwijderd waardoor de “keys” niet veranderd zijn:

array(3) {
	[0]=>
	string(5) "test1"
	[1]=>
	string(5) "test2"
	[3]=>
	string(5) "test4"
}

Door om de array_diff ook array_values te zetten los je dit op:

$array = array_values(array_diff($array, array('test3')));

Met als resultaat dat de “keys” opeenvolgend zijn:

array(3) {
	[0]=>
	string(5) "test1"
	[1]=>
	string(5) "test2"
	[2]=>
	string(5) "test4"
}