Metalgurke: Eigene Funktion geht nicht

Beitrag lesen

function first_last_hold (&$array)
{
$array = array(array_shift($array),(array_pop($array)));
return $array;
}

»»

$paar = first_last_hold($stack);

»»»» Hi T-Rex
»»»»
»»»» Ich muss mich/dich berichtigen.
»»»»
»»»» Dein Vorschlag geht leider doch nicht

T-Rex hat recht, du solltest dir mal Referenzen anschauen insbesondere bei Funktion (Stichwort CallByReference).

Allerdings hat die Funktion wie oben angegeben einen kleinen Logikfehler.
Die reference-Variable wird nämlich überschrieben, deshalb enthält die Variable $stack auch nach dem ersten Funktionsaufruf ein Array mit den Werten 1,16 und nicht wie gewünscht 2,...,15

Bedenke, dass mit "return" der Wert "kopiert" wird. Wenn ich aber einen Wert als Referenz returnieren will, muss ich das deklarieren. Vor dem definitions-Funktionsnamen gehört dann noch ein "&"-Zeichen und bei der Wertzuweisung durch die Funktion gehört auch noch ein "&"-Zeichen zwischen Zuweisungsoperator und Funktionsaufruf.

Das ganze sähe dann so aus. (ist nur ein Beispiel)

  
function &test()  
{  
  $a = 1;  
  return $a;  
}  
  
$b =& test();  

Bedenke auch, dass es nicht zwingend Sinn macht eine Parameterreferenz zu returnieren, da der Wert der Refenzvariable auch direkt in der Variable ausserhalb der Funktion geändert wird.

Beispiel:

  
$b = 1;  
  
function test2(&$a)  
{  
  ++$a; //ohne return, da der Wert auch direkt in $b geändert wird  
}  
test2($b);  
  
echo $b; //Ausgabe -> 2  

Zurück zu deinem Problem:
So sollte es funktionieren. $stack/$array wird nicht überschrieben und die Funktion gibt ein Array mit den zwei gewünschten Werten zurück.

  
function first_last_hold(&$array)  
{  
	return Array(array_shift($array),(array_pop($array)));  
}  
  
$stack = range(1, 16);  
$paar = first_last_hold($stack);  

Gruß Metalgurke