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

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

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

PHP array_fill() und array_fill_keys(): Arrays initialisieren

Sie befinden sich: Home > Php Tutorial > PHP array_fill() und array_...

PHP array_fill() und array_fill_keys(): Arrays initialisieren
Eintrag am:
20.05.2026
Hits / Besucher:
15
Sprache:
  Deutsch
Tutorial Art:
eigenes
Eingetragen von:
 
Beschreibung

PHP-Arrays vorab mit Default-Werten zu füllen ist eine Routineaufgabe, für die viele Entwickler reflexartig zur for-Schleife greifen. Dabei lösen array_fill() und array_fill_keys() genau diese Aufgabe in einer einzigen Zeile, sauber und in C-Geschwindigkeit. Dieses Tutorial zeigt beide Funktionen mit Syntax und den typischen Praxis-Patterns von Countern über Histogramme bis zur 2D-Matrix.

Was machen array_fill und array_fill_keys?

Wer in PHP ein Array mit einer bekannten Anzahl gleicher Werte braucht, etwa für einen Counter, ein Histogramm oder eine 2D-Matrix, sucht selten lange nach einer for-Schleife. Genau dafür existiert PHP array_fill: Die Funktion erzeugt in einem Aufruf ein Array mit der gewünschten Länge und füllt jedes Element mit demselben Default-Wert. Das Pendant array_fill_keys() macht dasselbe, nur mit benannten Schlüsseln aus einer Liste.

Illustration zum Tutorial: PHP array_fill() und array_fill_keys(): Arrays initialisieren

Bevor die Syntax und die typischen Counter- und Histogramm-Patterns folgen, hilft ein kurzer Blick darauf, wann sich welche der beiden Varianten lohnt.

Beide Funktionen sind elegante Ein-Zeiler für Aufgaben, die in foreach- oder for-Schleifen schnell unübersichtlich werden. PHP array_fill() ist die richtige Wahl, wenn nur die Anzahl der Einträge zählt, und array_fill_keys() die richtige Wahl, wenn die Schlüssel bereits feststehen. Das Tutorial zeigt beide Varianten mit Praxisbeispielen und grenzt sie von range() ab.

Syntax und Parameter

Die beiden Funktionen haben ähnliche, aber nicht identische Signaturen. PHP array_fill() erwartet drei Argumente, array_fill_keys() nur zwei.

<?php

array_fill(int $start_index, int $count, mixed $value): array
array_fill_keys(array $keys, mixed $value): array

Bei array_fill() bestimmt der erste Parameter den Startindex, der zweite die Anzahl der Einträge, der dritte den Wert. Bei array_fill_keys() wird das Schlüssel-Array übergeben, und jedes Element bekommt denselben Wert. Der $count bei array_fill muss >= 0 sein, sonst wirft PHP einen ValueError. Beide Funktionen liefern ein neues Array zurück, das Original bleibt unangetastet.

Erstes Beispiel: 10 Nullen

Zum Einstieg das einfachste Szenario: ein Array mit fünf Nullen. Das ist genau die Art Aufgabe, die mit PHP array_fill() in einer Zeile erledigt ist.

<?php

$nullen = array_fill(0, 5, 0);
print_r($nullen);
/* Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) */

Wer dasselbe mit einer for-Schleife schreiben müsste, bräuchte drei Zeilen und eine eigene Index-Variable. PHP array_fill() spart Schleifencode und ist außerdem schneller, weil die Allokation intern in C passiert.

Der Parameter $start_index

Der erste Parameter ist der Startindex und kann beliebig gesetzt werden, auch negativ. Das ist nützlich, wenn das Ergebnis-Array auf einen bestehenden Index-Bereich aufgesetzt werden soll.

<?php

$daten = array_fill(5, 3, 'leer');
print_r($daten);
/* Array ( [5] => leer [6] => leer [7] => leer ) */

In der Praxis kommt der $start_index vor allem dann ins Spiel, wenn das Ergebnis später mit einem anderen Array verkettet wird oder wenn eine bestimmte Numerierung erwartet wird. Wer Index 0 will, kann den Parameter trotzdem nicht weglassen, weil er Pflichtparameter ist.

array_fill_keys mit benannten Schlüsseln

Sobald die Schlüssel keine reinen Indizes sind, sondern Namen, ist array_fill_keys() die richtige Wahl. Die Funktion nimmt ein Array mit den gewünschten Schlüsseln und einen Default-Wert.

<?php

$felder = ['name', 'email', 'land'];
$defaults = array_fill_keys($felder, '');

print_r($defaults);
/* Array ( [name] => [email] => [land] => ) */

Das Ergebnis ist ein vollständig initialisiertes Array mit den drei Schlüsseln und leeren Strings als Werten. Das Pattern eignet sich perfekt für Konfigurations-Defaults, Formular-Initialisierung und überall dort, wo ein bekanntes Schlüssel-Set mit einheitlichen Werten gebraucht wird.

Counter-Initialisierung in einem Schritt

Eine sehr häufige Anwendung ist die Initialisierung eines Zähler-Arrays. Bevor eine Schleife die einzelnen Werte aufzählt und Treffer per ++ hochzählt, muss das Counter-Array alle möglichen Schlüssel kennen und auf 0 stehen.

<?php

$farben = ['herz', 'pik', 'kreuz', 'karo'];
$zaehler = array_fill_keys($farben, 0);

$ziehungen = ['herz', 'pik', 'herz', 'karo', 'herz'];
foreach ($ziehungen as $farbe) {
$zaehler[$farbe]++;
}

print_r($zaehler);
/* Array ( [herz] => 3 [pik] => 1 [kreuz] => 0 [karo] => 1 ) */

Ohne die Initialisierung wäre ein isset()-Check vor jedem Increment nötig, was den Code aufbläht. Mit array_fill_keys() ist die Initialisierung sauber, der eigentliche Zähl-Loop bleibt knapp, und kreuz taucht im Ergebnis mit 0 auf, obwohl die Farbe nicht gezogen wurde. Das ist häufig genau die gewünschte Eigenschaft für Auswertungen, in denen alle Kategorien angezeigt werden sollen.

Histogramm mit array_fill_keys + range

Ein Histogramm für Zahlenbereiche profitiert von der Kombination mit range(). Die Funktion erzeugt die Liste der Bucket-Werte, und array_fill_keys() macht daraus die Zähler-Map. Ein Vorab-Check mit array_key_exists() schützt zusätzlich vor unerwarteten Werten.

<?php

$buckets = array_fill_keys(range(0, 9), 0);

$werte = [3, 7, 1, 7, 0, 9, 3, 3];
foreach ($werte as $v) {
$buckets[$v]++;
}

print_r($buckets);
/* Array (
[0] => 1 [1] => 1 [2] => 0 [3] => 3 [4] => 0
[5] => 0 [6] => 0 [7] => 2 [8] => 0 [9] => 1
) */

Diese Pipeline ist ein One-Liner-Setup für Auswertungen, das auch für größere Bereiche skaliert. Wer die Buckets dynamisch berechnen will, kann range() auch mit Float-Schritten betreiben. PHP array_fill_keys() arbeitet dann mit den gerundeten Bucket-Grenzen als Schlüsseln.

2D-Array mit array_fill und array_map

Für mehrdimensionale Strukturen ist eine Schachtelung von array_fill und array_map die sauberste Lösung. Wichtig dabei: Wer einfach array_fill(0, 3, array_fill(0, 4, 0)) schreibt, bekommt zwar das gewünschte Layout, aber alle Zeilen teilen dasselbe innere Array.

<?php

$zeilen = 3;
$spalten = 4;

$matrix = array_map(
fn() => array_fill(0, $spalten, 0),
range(1, $zeilen)
);

print_r($matrix);
/* Array (
[0] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 )
[1] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 )
[2] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 )
) */

Diese Variante mit array_map erzeugt für jede Zeile ein eigenes inneres Array, was Mutation einer Zeile von den anderen entkoppelt. Bei Skalar-Werten wie 0 ist der Unterschied zwar nicht sichtbar, bei Objekten oder beim späteren Setzen einzelner Werte schon.

flowchart TD
    A[start_index, count, value] --> B[Array allokieren]
    B --> C[Schluessel: start_index bis start_index+count-1]
    C --> D[Jeder Wert: value]
    D --> E[Array zurueckgeben]

Vergleich array_fill und range

array_fill() und range() werden im Code häufig verwechselt. Beide erzeugen Arrays, aber mit unterschiedlichem Inhalt. PHP array_fill() befüllt alle Einträge mit demselben Wert. range() erzeugt eine aufsteigende oder absteigende Reihe von Werten.

<?php

print_r(array_fill(0, 5, 'leer'));
/* Array ( [0] => leer [1] => leer [2] => leer [3] => leer [4] => leer ) */

print_r(range(1, 5));
/* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) */

Faustregel: Wer denselben Wert mehrfach braucht, nimmt array_fill. Wer eine fortlaufende Zahlenreihe oder eine Buchstabenfolge will, nimmt range. Beide Funktionen lassen sich kombinieren, wie das Histogramm-Beispiel zeigt.

Best Practices und Objekt-Stolperfalle

Drei Punkte sollten im Code-Review immer beachtet werden. Erstens, der $count muss positiv sein. Negative Werte führen zu einem ValueError. Zweitens, bei Objekten als Default-Wert wird die Referenz geteilt, nicht das Objekt geklont. Das führt zu subtilen Bugs, wenn eines der Array-Elemente das Objekt mutiert.

<?php

class Counter {
public int $value = 0;
}

$obj = new Counter();
$arr = array_fill(0, 3, $obj);
$arr[0]->value = 42;

echo $arr[1]->value;
/* Ausgabe: 42, weil alle drei Eintraege dasselbe Objekt referenzieren */

Drittens, wenn null als Default verwendet wird, sollte nicht später mit isset() auf Anwesenheit geprüft werden. isset($arr['key']) ist bei null falsch, obwohl der Schlüssel existiert. In solchen Fällen ist array_key_exists() die saubere Prüfung.

Fazit

PHP array_fill() und array_fill_keys() sind kompakte Funktionen, die Arrays mit Default-Werten in einem Zug initialisieren. Sie eignen sich perfekt für Counter, Histogramme, Konfigurations-Defaults und mehrdimensionale Strukturen. Wer die Stolperfalle mit Objekt-Referenzen kennt, den Unterschied zu range() versteht und array_fill_keys gezielt für benannte Schlüssel einsetzt, spart sich im Alltag viele handgeschriebene Schleifen.

 

Tags:

 

 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
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.