Array neu aufbauen/verändern

BastianW

Mitglied
Hallo zusammen,

ich habe folgendes Array

HTML:
Array
(
    [Rose] => Array
        (
            [name] => Rose
            [category] => Blumen
            [short_description] => Eine Blume.
            [CategoryOrder] => 2
        )

    [Birke] => Array
        (
            [name] => Birke
            [category] => Baueme
            [short_description] => Ein Baum
            [CategoryOrder] => 1
        )
}

das müßte ich wie folge umformen (category und categoryOrder können im im letzten array auch drinn sein, nur wirklich brauchen tue ich die da nicht mehr.):


HTML:
Array
(
    [2] => Array
        (
		[Blumen] => Array
		(
			[name] => Rose
			[short_description] => Eine Blume.
		)
        )

    [1] => Array
        (
		[Baueme] => Array
		(
			[name] => Birke
            		[short_description] => Ein Baum
        	)
        )
}

Wie mache ich das am geschicktesten? Ich könnte da ein foreach drum herum bauen und das neu aufbauen, glaube aber nicht das es gerade die performanteste Lösung ist so etwas zu tun.
 
Also du versucht eine komplette Transformation deines Arrays, das ich auch iterativ über foreach lösen würde.
Es gibt Lösungen über array_walk und array_filter zum Ergebnis zu kommen, da aber immer wieder eine callback-funktion aufgerufen wird halte ich das für langsamer.
 
Sofern die numerisch indizierten Arrays unnötig sind, kannst du es relativ einfach lösen:
PHP:
<?php
$newArray = array();

foreach ( $oldArray as $pflanze => $props ) {
	// sofern die Kategorie noch nicht im Array existiert, wird sie erstellt
	if (!isset( $newArray[ $props['category'] ] )) {
		$newArray[ $props['category'] ] = array();
	}

	$newArray[ $props['category'] ][] = array(
			'name'              => $pflanze,
			'short_description' => $props['short_description']
		);
}

Wie ZodiacXP aber schon sagt, ist das komplette Umstellen durchaus komplex. So müsstest du beispielsweise - sofern du nicht auf die übergeordneten Arrays verzichten möchtest - Zu jeder Pflanze nochmal dein neues Array durchlaufen und nach dem entsprechenden Index der Kategorie suchen. Alternativ dazu kannst du ein Array zum Routing implementieren, was die Loop-Ups dezimiert / erspart, aber schön ist was anderes.
 
hm, hatte gehofft da gibts es eine PHP Function...

Ich denke aber auch das ich es einfach mit einem Foreach lösen werde. Evtl. kann ich auch zwei foreach zusammenlegen so das ich da etwas an abfragen einspare.

Danke euch beiden...
 
Zurück