X-Ray: Feld aus mehrdimensionalem Array als Index eines zweiten Arrays

Beitrag lesen

Auf der Suche nach der Ursache für ein mir völlig unverständliches Verhalten meines PHP-Skripts frage ich mich nun, ob folgendes in PHP überhaupt möglich ist:

ich sehe da kein Problem. Magst Du uns besagtes Verhalten näher beschreiben, oder willst Du selbst dem Problem auf die Spur kommen?

Danke, das ist schonmal gut. Inzwischen habe ich das Problem weiter eingrenzen können, es scheint an einer ganz anderen Stelle zu liegen. Man betrachte folgenden Code:

  
$projekte = array(  
  'A' => array(  
    'Investition' => 80,  
    'Ertrag' => 100  
  ),  
  'B' => array(  
    'Investition' => 50,  
    'Ertrag' => 75  
  ),  
  'C' => array(  
    'Investition' => 105,  
    'Ertrag' => 130  
  ),  
  'D' => array(  
    'Investition' => 70,  
    'Ertrag' => 95  
  )  
);  
  
// Renidte bestimmen  
foreach ($projekte as $p => &$w) {  
  $w['Rendite'] = $w['Ertrag'] / $w['Investition'];  
  $renditen[$p] = $w['Rendite'];  
}  
  
// Projekte nach Rendite sortieren (absteigend)  
array_multisort($renditen, SORT_DESC, $projekte);  
  
// Sich ausschliessende Projekte festlegen  
$ausschlussprojekt1 = 'B';  
$ausschlussprojekt2 = 'C';  
  
echo "Projekte:<br><pre>";  
print_r($projekte);  
echo "</pre>";  
  
// Moegliche Portfolios bestimmen  
foreach ($projekte as $p => $w) {  
  if ($p != $ausschlussprojekt1) {  
    $portfolios[0][] = $p;  
  }  
  if ($p != $ausschlussprojekt2) {  
    $portfolios[1][] = $p;  
  }  
}  
  
echo "<hr>Projekte #2:<br><pre>";  
print_r($projekte);  
echo "</pre><hr>";  

Die Ausgabe dieses Scripts kann man sich hier ansehen:
http://bfwtest.smk.biz/test_mehrd_array_foreach.php

Der springende Punkt ist: Durch die letzte foreach-Schleife wird offensichtlich das Array $projekte verändert. Das Muster der Veränderung kann ich noch nicht nachvollziehen. In diesem Beispeil werden die Werte von Projekt D durch die von Projekt C ersetzt. Warum?

Schöne Grüße,
Stefan