PHP kein foreach bei einem array-key

Schumiel

Lieutenant
Registriert
Jan. 2010
Beiträge
825
Hallo,

und zwar habe ich ein Array, dass aber nur ein key besitzt. Ungern will ich es dann mit "[0]" aufrufen oder weiter nutzen. Das möchte ich einfach weg haben. Ich habe mir dazu folgendes gebaut:

Code:
$test= array();

if(is_array($getTest)) {
  foreach($getTest AS $item) {
    $test = $item;
  }
}

Das funktioniert, finde das aber nicht schön. Bestimmt gibt es eine php-Funktion dafür, die ich durch Googeln einfach nicht finden kann - ich suche sicherlich falsch.

Daher meine Frage, ob jemand eine passende php-Funktion kennt?
 
$item = reset($test);

reset setzt eigentlich den internen Pointer auf dem Array wieder auf den ersten Wert zurück, hat aber den Nebeneffekt, dass es das 1. Element im array auch returned. Wenn das array leer ist, gibt es FALSE zurück.

Darüber hinaus spricht aber auch nichts dagegen es sich einfach mit $test[0] abzuholen.
 
  • Gefällt mir
Reaktionen: Schumiel, psYcho-edgE und Sgt_H4rtman
Müsst mit der key() Methode auch gehen. (bin mir aber nicht sicher, mache kaum php)
$ersterWert= key($array);
 
Findest Du völlig rechtmäßig nicht schön, weil ist nicht schön. Einfach den Typen einer Variable ändern? Nogo.

Die richtige Funktion wäre array_top(). Allerdings stellt PHP die nicht bereit, müßte man also selber in seiner Funktionsbibliothek implementieren.

Zum Beispiel so in etwa:

PHP:
function array_top(array $input)
{
    if(count($input)===1)
    {
        return $input[ array_key_first($input) ];
    }
    else
    {
        throw new Exception("Too long");
    }
}


echo array_top(array(18)) . "\n";
echo array_top(array(34=>'first element')) ."\n";
echo array_top(array('first' => 'FIRST')) . "\n";

# zu viele Elemente
echo array_top(array(13,34)) . "\n";

?>
 
Wie siehts denn mit array_shift() und array_pop() aus?

Oder habe ich die Anforderungen missverstanden?
 
Eingabedaten zerstören? Nee, nee. Damit fangen wir gar nicht erst an. Klar könnte man array_shift nehmen, aber dann müßte man immer noch schauen wie lang die Eingabe war, sonst kopiert man sich mit Pech dumm und dämlich. Und wenn eh ein Funktionsobjekt gebaut werden muß, dann kann man auch auf array_first* zurückgreifen.

Alternativen gibts aber natürlich immer.
 
Was heißt denn hier zerstören? PHP übergibt skalare Werte und Arrays immer by value. Das "Original" wird im Zweifelsfall gar nicht verändert. Kommt halt drauf wie/wo man es verwendet. Alle genannten Funktionen erfüllen den Zweck, alle bringen Seiteneffekte mit sich. reset() und end() modifizieren den internen Elementzeiger des Arrays, array_shift() und array_pop() entfernen jeweils ein Element im Original und müssten ggf. in einer eigenen Methode gewrapt werden, wenn das nicht gewünscht ist. Muss man halt wissen, ob einer dieser Effekte im eigenen Anwendungsfall störend sein könnte.
 
Zurück
Oben