User Tools

Site Tools


php:functions:array:arrayuniquebysubitem

[PHP] array_unique_by_subitem()

Ein Array_unique anhand eines Subitems. zB. Bei einem 2-Dimensionalen Array der eine Tabelle darstellt alle mit einer Unique-Indexfeld erstellen

Funktion

array_unique_by_subitem.php
/**
 * array_unique über ein Element eines Array
 * mpl by ERB software
 * http://wiki.yaslaw.info/dokuwiki/doku.php/php/functions/array/arrayuniquebysubitem
 * @author    stefan.erb(at)erb-software.com
 * @param     Array<Key => Array<Node>>   Ein mehrstufiger Array
 * @param     String                      Key im Array der unique sein soll (key oder index)
 * @param     Integer                     SORT_REGULAR, SORT_STRING, SORT_NUMERIC. Siehe sort_flags-Parameter von array_unique
 */
 * @return    Array<Key => Array<Node>>   
 */
function array_unique_by_subitem($array, $key, $sort_flags  = SORT_STRING){
	$items = array();
	// Die Subeitems auslesen
	foreach($array as $index => $item) $items[$index] = $item[$key];
	//Die Subitems mit array_unique beabreiben
	$uniqueItems = array_unique($items, $sort_flags);
	//Der eigentliche Array über den Key mit den selektierten Subitems abgleichen
	return array_intersect_key($array, $uniqueItems); 
}

Beispiele

Array ohne Schlüssel

$data[] = array('Volvo', 'blau');
$data[] = array('Volvo', 'grün');
$data[] = array('VW', 'silber');
 
//Über den Feldindex arbeiten. Also Index 0 um die Automarke als eindeutiges Feld zu wählen
print_r(array_unique_by_subitem($data, 0));

Ergibt

Array(
	[0] => Array(
			[0] => Volvo
			[1] => blau
		)
	[2] => Array(
			[0] => VW
			[1] => silber
		)
)

Array mit Schlüssel

$data[] = array('marke' => 'Volvo', 'farbe' => 'blau');
$data[] = array('marke' => 'Volvo', 'farbe' => 'grün');
$data[] = array('marke' => 'VW',    'farbe' => 'silber');
 
//Der key ist hier der Name des Schlüssels. In dem Fall 'marke'
print_r(array_unique_by_subitem($data, 'marke'));

Ergibt

Array(
	[0] => Array(
			[marke] => Volvo
			[farbe] => blau
		)
	[2] => Array(
			[marke] => VW
			[farbe] => silber
		)
)
php/functions/array/arrayuniquebysubitem.txt · Last modified: 10.02.2014 22:54:48 (external edit)