2016-07-29 11 views
1

Ich muss ein Array reduzieren und dabei sicherstellen, dass es keine doppelten Schlüssel gibt.Abflachen Array unter Berücksichtigung der übergeordneten Schlüssel

Für den Fall lassen sagen, ich habe dies:

$arr = array(
    $foo = array(
     'donuts' => array(
       'name' => 'lionel ritchie', 
       'animal' => 'manatee', 
      ) 
    ) 
); 

Ich brauche eine abgeflachte Array, das wie folgt aussieht:

$arr = array(
    'donuts name' => 'lionel ritchie', 
    'donuts animal' => 'manatee', 
); 

Es muss arbeiten, auch wenn wir mehr als 1 Elternteil Schlüssel haben.

Ich habe den folgenden Code, aber ich bin mir nicht sicher, ob ich damit arbeiten kann.

foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array1)) as $k=>$v){ 
    $array1c[$k] = $v; 
} 

Antwort

1
array_reduce($array, 'array_merge', array()) 

Beispiel:

$a = array(array(1, 2, 3), array(4, 5, 6)); 
$result = array_reduce($a, 'array_merge', array()); 

Ergebnis:

array[1, 2, 3, 4, 5, 6]; 
1

Es ist sehr einfach zu tun ist, machen es einfach so:

$arr = array(
    $foo = array(
     'donuts' => array(
       'name' => 'lionel ritchie', 
       'animal' => 'manatee', 
      ) 
    ) 
); 

// Will loop 'donuts' and other items that you can insert in the $foo array. 
foreach($foo as $findex => $child) { 
     // Remove item 'donuts' from array, it will get the numeric key of current element by using array_search and array_keys 
     array_splice($foo, array_search($findex, array_keys($foo)), 1); 
     foreach($child as $index => $value) { 
      // Adds an array element for every child 
      $foo[$findex.' '.$index] = $value; 
     } 
} 

Ergebnis var_dump($foo); sein wird:

array(2) { 
    ["donuts name"]=> 
    string(14) "lionel ritchie" 
    ["donuts animal"]=> 
    string(7) "manatee" 
} 

Versuche mal :)

+0

Sollte es allerdings nicht rekursiv sein? Sagen wir, wir haben 10 Eltern. – dms

+0

Ja, versuchen Sie eine Funktion zu erstellen, die diese Operationen rekursiv ausführt. – Syncro

Verwandte Themen