Multidimensionale array naar enkele array

Door 5 maart 2013Tips & Trucs

Mocht je uit een database meerdere items ophalen dan zal een array er bijvoorbeeld zo uit zien:

Array
(
	[0] => Array
		(
			[name] => Piet
			[age] => 20
		)

	[1] => Array
		(
			[name] => Klaas
			[age] => 29
		)

	[2] => Array
		(
			[name] => Jan
			[age] => 46
		)

	[3] => Array
		(
			[name] => Peter
			[age] => 18
		)

)

Maar mocht je nu één item ophalen, bijvoorbeeld enkel de namen:

Array
(
	[0] => Array
		(
			[name] => Piet
		)

	[1] => Array
		(
			[name] => Klaas
		)

	[2] => Array
		(
			[name] => Jan
		)

	[3] => Array
		(
			[name] => Peter
		)

)

Dan heeft het multidimensionale geen zin meer natuurlijk en kan de array er beter zo uit zien:

Array
(
	[0] => Piet
	[1] => Klaas
	[2] => Jan
	[3] => Peter
)

Om dat voor elkaar te krijgen kunnen we array_map gebruiken:

function naam_ophalen($array)
{
	return $array['name'];
}

$de_nieuwe_array = array_map("naam_ophalen", $de_array);

Mocht je op PHP 5.3 of hoger draaien kunnen we de zogeheten “anonymous functions” gebruiken, ofwel een anonieme cq naamloze functie. Hiermee kunnen we alles op één regel zetten:

$de_nieuwe_array = array_map(function($array) { return $array['name']; }, $de_array);

Wanneer dit gebruikt wordt is bijvoorbeeld als je de array in implode wilt stoppen. Om daar een leuk voorbeeld bij te geven:

// De multidimensionale array met namen
$de_array = [['name' => 'Piet'],['name' => 'Klaas'],['name' => 'Jan'],['name' => 'Peter']];

// De array omzetten naar een enkele array
$de_nieuwe_array = array_map(function($array) { return $array['name']; }, $de_array);

// De namen scheiden door komma's
$namen = implode(', ',$de_nieuwe_array);

// De laatste komma vervangen door "en"
$namen = preg_replace('/(.*),/','$1 en',$namen);

// Het resultaat laten zien
echo $namen;

Het resultaat: Piet, Klaas, Jan en Peter