Mehrdimensionales Array "nach Level" umsortieren

Caralynn

Mitglied
Hallo,

wie man ein mehrdimensionales Array in ein 1-dimensionales umwandelt, habe ich mittlerweile raus, das hilft mir aber im Moment nicht weiter. Daher beschaeftigt mich seit einiger Zeit die Frage, wie ich ein mehrdimensionales Array in eines umwandle, welches verschiedene "Level" beinhaltet.


Beispiel-Array - sowohl als Bild als auch das, was ich mittlerweile als Array habe. Es geht um die "Umsetzung" eines Stammbaumes und die "Umarbeitung" benoetige ich, um die Daten weiter zu verarbeiten.


PHP:
$array = array(	"id" 		=> 10,
		              "vater" 	=> array(	"id" 		=> 8,
												"vater" 	=> array("vater" => 0, "mutter" => 0),
												"mutter" 	=> array("vater" => 0, "mutter" => 0)),
				"mutter" 	=> array(	"id" 		=> 9,
												"vater" 	=> array("vater" => 0, "mutter" => 0),
												"mutter" 	=> array("vater" => 0, "mutter" => 0)));

Mein Endziel ist nun ein neues Array, welches die folgende Form hat:


PHP:
Array
(
    [0] => 10
    [1] => 8,9
    [2] => 0,0,0,0
)

Ich bin mir eigentlich ziemlich sicher, dass etwas verdammt einfaches ist :rolleyes: - und ich einfach den Wald vor lauter Baeumen oder Rekursionsaufrufen, ich bin mir mittlerweile nicht mehr sicher, nicht sehe.

Viele Grueße,
Cara
 

Anhänge

  • pedi.jpg
    pedi.jpg
    4,9 KB · Aufrufe: 4
Hallo Caralynn,

erstmal würde ich das Array richtig formatieren:
PHP:
$array = array
(
  "id"  => 10,
  "vater" =>
  array
  (
    "id"  => 8,
    "vater" => array
    (
      "vater" => 0,
      "mutter" => 0
    ), 
    "mutter" => array
    (
      "vater" => 0,
      "mutter" => 0
    )
  ), 
  "mutter"  => array
  (
    "id"  => 9, 
    "vater" => array
    (
      "vater" => 0,
      "mutter" => 0
    ), 
    "mutter"  => array
    (
      "vater" => 0, "mutter" => 0
    )
  )
);
Dann hat man einen viel besseren Überblick.
Probier mal folgenden Code:
PHP:
$result = array
(
  0 => $array['id'],
  1 => array
  (
    $array['vater']['id'],
    $array['mutter']['id']
  ),
  2 => array
  (
    $array['vater']['vater'],
    $array['vater']['mutter'],

    $array['mutter']['vater'],
    $array['mutter']['mutter']
  )
);
 
Hallo,

das scheint die Sache leider nicht zu treffen. Außerdem kann das "Array" auch um einiges laenger sein, das war nur ein ziemlich vereinfachtes Beispiel. Daher sollte es wohl eher "rekursiv" geloest werden.

Viele Grueße,
Cara
 
Da hab ich dch vor einiger Zeilt mal eine Funktion gechrieben - ev. hilft dir die weiter
PHP array_sort_by_subarray_item
PHP:
/**
 * mpl      by ERB software
 * @author  stefan.erb(at)erb-software.com
 * @since   PHP 5.2
 * Sortiert einen 2-Dimensionalen Array nach einem Key in der 2ten Dimension
 * @param $array        Array der sortiert wird
 * @param $key          Key im Array der sortiert werden soll (key oder index)
 * @param $direction    Sortierrichtung. SORT_ASC oder SORT_DESC
 * @param $sort_flags   SORT_REGULAR, SORT_STRING, SORT_NUMERIC. Siehe sort_flags-Parameter von sort()
 */
function array_sort_by_subarray_item(&$array, $key, $direction = SORT_ASC, $sort_flags = SORT_REGULAR){
    $sort = array();
    foreach($array as $index => $item){
        $sort[$index] = strtoupper($item[$key]);
    }    
    return array_multisort($sort, $direction, $sort_flags, $array);    
}
 
Zurück