Rückgabe eines Default-Wertes bei einem Array ohne Angabe eines Keys bei Funktionsaufruf

Hallo,

ich bin nicht sicher, ob das was ich vorhabe, möglich ist. Ich habe schon nach ähnlichen Foreneinträgen gesucht, aber nicht wirklich etwas gefunden zu haben.

Ich habe eine Funktion foobar(), die als Ergebnis ein Array zurückliefert.

Kurzer Beispielcode:

function foobar()  {
	$arr = array[
		'foo'     => "bar",
		'bar'     => "foo",
		'lorem'   => "ipsum"
	];
	return $arr;
}

echo foobar()['foo']; //prints 'bar'

Nun möchte ich, dass wenn die Funktion foobar() ohne Angabe eines Keys bspw. “1337” zurückgibt. Ich denke, dass das nicht möglich ist, würde auch dem widersprechen was ich über Arrays weiß aber evtl. gibt es ja doch eine Methode, mit der das tatsächlich geht (bspw. Aliasing (foobar() = foobar()[‘key’]).

LG, DMan

Mal sehen ob ich das richtig verstehe: Wieso übergibst du der Funktion nicht einen Parameter, etwa so:

function foobar($key)  {
	$arr = array[
		'foo'     => "bar",
		'bar'     => "foo",
		'lorem'   => "ipsum"
	];
	if (in_array($key,array_keys($arr))){
           return $arr[$key];
        } else {
           return '1337';
        }
}

Code natürlich ungetestet. Oder meinst du etwas anderes?

Mfg :wink:

edit: Sorry für das Format, die Codeformatierung ist hier nicht sehr brauchbar …

Hey Mgier,

es geht schon in die richtige Richtung, allerdings will ich den Key nicht als Parameter übergeben (die Funktion hat schon Parameter und ich will, dass das Array per [‘key’] angesprochen wird).

Bspw. soll bei
foobar()[‘foo’] = "bar"
usw. rauskommen und bei foobar() = 1337 oder sonst irgendwas rauskommen, letzteres funktioniert einwandfrei.

LG, DMan

Da du in PHP ja nicht überladen im klassischen Sinn kannst, wird das schwer. Mir wäre keine Syntax bekannt, die das erlaubt. Dir wird nichts anderes übrig bleiben, als das über ein eigenes einfaches Objekt oder eine eigene Funktion zu lösen. Allerdings:
> allerdings will ich den Key nicht als Parameter übergeben (die Funktion hat schon Parameter
Ich sehe hier den Widerspruch/das Hindernis nicht. Du kannst ja mehrere Parameter übergeben. Oder geht es dir nur um die “Schönheit”?

Dein vorhaben ist so nicht möglich.

foobar() gibt ein Array zurück. Der key access geschieht nachdem die Funktion das Array zurückgegeben hat, und ich sehe keine Möglichkeit von innerhalb der Funktion zu erkennen, ob der key access geschieht oder nicht.

Du musst Parameter an die Funktion übergeben, um das Verhalten der Funktion zu beeinflussen. Was du suchst ist womöglich ein “default argument”:

function foobar($key=null) {
    $arr = [ … ];
    if(is_null($key) || !isset($arr[$key])) {
        return '1337';
    }
    return $arr[$key];
}

[quote=“Balmung, post:5, topic:32889”]Dein vorhaben ist so nicht möglich. […]
[/quote]
Hab ich mir schon fast gedacht, gut das auch bestätigt zu bekommen.

Habe auch schon daran gedacht, wollte diesen Parameter aber in der “typischen” Array-Syntax ($arr[‘key’]) übergeben statt als Funktionsparameter, einfach der “Schönheit” halber.

[quote=“Mgier, post:4, topic:32889”]Ich sehe hier den Widerspruch/das Hindernis nicht. Du kannst ja mehrere Parameter übergeben. Oder geht es dir nur um die “Schönheit”?
[/quote]
Jap, wie erwähnt einfach nur der “Schönheit” halber.

Trotzdem vielen Dank euch beiden und Entschuldigung für die späte Antwort, hatte heute viel zu tun (Studiums-Projekte). ^^

LG, DMan