Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

Schlüssel eines Arrays zurückgeben

Sie befinden sich: Home > Php Tutorial > Schlüssel eines Arrays...

Schlüssel eines Arrays zurückgeben


Eintrag am:  01.02.2023
Hits / Besucher:  1758
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Die Funktion array_keys() gibt alle Schlüssel eines Arrays als neues numerisches Array zurück. Das ist nützlich, wenn man die Schlüssel separat verarbeiten möchte, zum Beispiel um Feldnamen aus einem Formular zu extrahieren, verfügbare Konfigurationsoptionen aufzulisten oder gezielt nach bestimmten Schlüsseln zu suchen.

Syntax und Grundlagen

Die Funktion kann auf drei Arten aufgerufen werden:

/* Alle Schlüssel zurückgeben */

array_keys(array $array): array

/* Nur Schlüssel mit bestimmtem Wert */
array_keys(array $array, mixed $filter_value): array

/* Mit typstrengen Vergleich */
array_keys(array $array, mixed $filter_value, bool $strict = false): array

Ohne weitere Parameter gibt array_keys() alle Schlüssel zurück. Mit dem optionalen $filter_value werden nur die Schlüssel zurückgegeben, deren zugehöriger Wert dem Filterwert entspricht.

Beispiel: Alle Schlüssel eines Arrays

Im einfachsten Fall gibt man ein assoziatives Array und erhält alle Schlüssel als numerisch indiziertes Array:

<?php

$person = [
"name" => "Max Mustermann",
"alter" => 30,
"stadt" => "Berlin",
"beruf" => "Entwickler"
];

$schluessel = array_keys($person);
print_r($schluessel);
?>

Ausgabe:

Array

(
[0] => name
[1] => alter
[2] => stadt
[3] => beruf
)

Die Schlüssel werden in der Reihenfolge zurückgegeben, in der sie im Original-Array definiert sind. Bei numerischen Arrays erhält man die Indizes 0, 1, 2, ... als Werte.

Schlüssel nach Wert filtern

Mit dem zweiten Parameter kann man gezielt die Schlüssel ermitteln, die einen bestimmten Wert haben. Das entspricht einer umgekehrten Suche: Statt vom Schlüssel zum Wert geht man vom Wert zu allen passenden Schlüsseln:

<?php

$noten = ["Mathe" => 2, "Deutsch" => 1, "Physik" => 2, "Englisch" => 1, "Sport" => 3];

/* Alle Fächer mit Note 2 */
$note_zwei = array_keys($noten, 2);
print_r($note_zwei);
/* Array ( [0] => Mathe [1] => Physik ) */

/* Alle Fächer mit Note 1 */
$note_eins = array_keys($noten, 1);
print_r($note_eins);
/* Array ( [0] => Deutsch [1] => Englisch ) */
?>

Im Gegensatz zu array_search(), das nur den ersten Treffer liefert, gibt array_keys() mit Filterwert alle passenden Schlüssel zurück.

Der $strict-Parameter: Typstrenger Vergleich

Standardmäßig vergleicht array_keys() mit dem losen Operator ==. Bei gemischten Datentypen führt das zu unerwarteten Treffern. Mit $strict = true wird der typsichere Operator === verwendet:

<?php

$daten = ["1", 1, true, "1.0", null];

/* Ohne strict: "1" == 1 == true */
$ohne = array_keys($daten, 1);
print_r($ohne);
/* Array ( [0] => 0 [1] => 1 [2] => 2 ) */

/* Mit strict: Nur exakter int-Match */
$mit = array_keys($daten, 1, true);
print_r($mit);
/* Array ( [0] => 1 ) */
?>

Ohne strict findet PHP drei Treffer, weil "1" == 1 und true == 1 beide wahr sind. Mit strict = true wird nur der Integer 1 an Index 1 gefunden. Wer mit gemischten Typen arbeitet, sollte den Strict-Modus immer aktivieren.

array_keys() vs. array_values(): Das Gegenstück-Paar

array_keys() und array_values() bilden ein logisches Paar: Die eine Funktion extrahiert die Schlüssel, die andere die Werte. Zusammen zerlegen sie ein assoziatives Array in seine Bestandteile:

<?php

$config = ["host" => "localhost", "port" => "3306", "db" => "shop"];

$schluessel = array_keys($config);
/* Array ( "host", "port", "db" ) */

$werte = array_values($config);
/* Array ( "localhost", "3306", "shop" ) */

/* Zusammenfügen mit implode */
echo implode(", ", $schluessel);
/* host, port, db */
?>

array_values() wird außerdem häufig verwendet, um ein Array nach dem Entfernen von Elementen neu zu indizieren, da die Schlüssel dann lückenlos bei 0 beginnen.

Praxisbeispiel: Pflichtfelder in Formularen prüfen

Ein häufiger Anwendungsfall für array_keys() ist die Validierung von Formulardaten. Man extrahiert die eingesendeten Feldnamen und prüft, ob alle Pflichtfelder vorhanden sind:

<?php

$pflichtfelder = ["name", "email", "nachricht"];

/* Simulierte Formulardaten */
$formulardaten = [
"name" => "Max",
"email" => "max@beispiel.de",
"telefon" => "0123456789"
];

$eingesendet = array_keys($formulardaten);
$fehlend = array_diff($pflichtfelder, $eingesendet);

if (!empty($fehlend)) {
echo "Fehlende Felder: " . implode(", ", $fehlend);
/* Fehlende Felder: nachricht */
} else {
echo "Alle Pflichtfelder ausgefüllt!";
}
?>

Mit array_keys() werden die Feldnamen aus den Formulardaten extrahiert. array_diff() ermittelt dann, welche Pflichtfelder fehlen. Dieses Muster lässt sich leicht an eigene Validierungsanforderungen anpassen.

Schlüssel prüfen: array_key_exists() und isset()

Wer nur wissen möchte, ob ein einzelner Schlüssel existiert, braucht nicht array_keys(). Dafür gibt es effizientere Alternativen:

FunktionPrüftNULL-Werte
array_key_exists()Ob der Schlüssel existiertGibt true auch bei NULL-Wert
isset()Ob der Schlüssel existiert UND nicht NULL istGibt false bei NULL
array_keys()Alle oder gefilterte SchlüsselGibt Liste zurück, nicht bool

In den meisten Fällen reicht isset() völlig aus. array_key_exists() benötigt man nur, wenn der Unterschied zwischen „Schlüssel nicht vorhanden“ und „Schlüssel vorhanden mit Wert NULL“ wichtig ist. array_keys() ist die richtige Wahl, wenn man eine Liste von Schlüsseln braucht.

Kombination: array_keys() + array_combine()

array_keys() und array_values() lassen sich als Bausteine für array_combine() nutzen. Damit kann man Arrays umstrukturieren oder die Schlüssel eines Arrays als Werte verwenden:

<?php

$config = ["host" => "localhost", "port" => "3306"];

/* Schlüssel als Werte, Werte als Schlüssel */
$umgedreht = array_combine(
array_values($config),
array_keys($config)
);
print_r($umgedreht);
/* Array ( [localhost] => host [3306] => port ) */

/* Schlüssel zu einem "index => name" Mapping */
$felder = ["name", "email", "telefon"];
$mapping = array_combine($felder, range(0, count($felder) - 1));
print_r($mapping);
/* Array ( [name] => 0 [email] => 1 [telefon] => 2 ) */
?>

Diese Technik ist besonders nützlich, wenn man Daten zwischen verschiedenen Formaten transformieren muss, z.B. beim Import von CSV-Dateien, wo die Spaltennamen als Schlüssel dienen sollen.

Verwandte Tutorials

Das Arbeiten mit Schlüsseln und Werten in Arrays ist ein zentrales Thema in PHP. Diese Tutorials behandeln verwandte Funktionen:

Häufige Fragen zu array_keys()

Hier werden typische Fragen und Stolperfallen bei der Arbeit mit array_keys() beantwortet.

Gibt array_keys() die Schlüssel in der Original-Reihenfolge zurück?

Ja, die Schlüssel werden in der Reihenfolge zurückgegeben, in der sie im Array definiert sind. PHP-Arrays behalten ihre Einfügereihenfolge bei, und array_keys() respektiert diese Ordnung.

Was ist der Unterschied zwischen array_keys() und array_search()?

array_search() gibt nur den ersten Schlüssel zurück, dessen Wert dem Suchwert entspricht. array_keys() mit Filterwert gibt alle passenden Schlüssel als Array zurück. Wer nur einen Treffer braucht, nimmt array_search(). Wer alle braucht, nimmt array_keys().

Kann man mit array_keys() prüfen, ob ein Schlüssel existiert?

Technisch ja, mit in_array("key", array_keys($array)). Das ist aber umständlich und langsamer als array_key_exists("key", $array) oder isset($array["key"]). Für die reine Existenzprüfung eines einzelnen Schlüssels sind die spezialisierten Funktionen die bessere Wahl.

Funktioniert array_keys() mit verschachtelten Arrays?

array_keys() gibt nur die Schlüssel der ersten Ebene zurück. Bei verschachtelten Arrays werden die Sub-Arrays als Werte behandelt, ihre internen Schlüssel werden nicht extrahiert. Für eine rekursive Schlüssel-Extraktion müsste man eine eigene Funktion schreiben.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.