Array_Column () ist eine häufig verwendete Funktion in PHP, mit der Daten aus einer Spalte aus einem mehrdimensionalen Array extrahiert werden. Es hilft uns leicht, spezifische Informationen aus komplexen Datenstrukturen zu extrahieren. Viele Entwickler können jedoch auf ein Problem stoßen, wenn Sie Array_Column () verwenden: Was wird PHP -Handle, wenn Sie versuchen, eine Spalte zu extrahieren, die nicht vorhanden ist? In diesem Artikel wird das Verhalten dieser Frage ausführlich analysiert und einige gängige verwandte Fragen beantwortet.
Die Syntax der Funktion array_column () lautet wie folgt:
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$ Array : Das multidimensionale Eingangsarray.
$ column_key : Der Schlüsselwert der zu extrahierenden Spalte. Wenn der Schlüssel der Spalte nicht vorhanden ist, wird Null zurückgegeben.
$ INDEX_KEY : Optionaler Parameter, Angabe des als Rückgabearray verwendeten Schlüsselwerts.
Die Funktion dieser Funktion besteht darin, alle Elemente der angegebenen Spalte zurückzugeben. Wenn der angegebene $ column_key in jedem Subtarray existiert, extrahiert er alle Daten für diese Spalte.
Wenn Sie versuchen, eine nicht existierende Spalte zu extrahieren, gibt Array_Column () ein leeres Array ohne Vorwarnung oder Fehler zurück. Zum Beispiel:
$data = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
$names = array_column($data, 'name');
print_r($names);
// Versuchen Sie, die nicht existierende Spalte zu extrahieren 'age'
$ages = array_column($data, 'age');
print_r($ages);
Ausgangsergebnis:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Array
(
)
Wie oben gezeigt, gibt Array_Column () ein leeres Array zurück, wenn ein nicht existierender Spaltenname (z. B. Alter ) übergeben wird. Zu diesem Zeitpunkt werden keine Fehler oder Warnungen geworfen, nur eine einfache Rückkehr eines leeren Arrays.
Wenn Sie gleichzeitig den Parameter $ index_key übergeben und die Spalte nicht existiert, wird PHP weiterhin ein leeres Array zurückgeben. Es ist zu beachten, dass der Parameter $ index_key keinen Einfluss auf das Ergebnis hat, da bei nicht existierenden Spalten einfach nicht möglich ist.
$names_with_key = array_column($data, 'name', 'id');
print_r($names_with_key);
// Versuchen Sie, eine Spalte zu haben, die nicht existiert
$ages_with_key = array_column($data, 'age', 'id');
print_r($ages_with_key);
Ausgangsergebnis:
Array
(
[1] => Alice
[2] => Bob
[3] => Charlie
)
Array
(
)
Unabhängig davon, ob $ index_key festgelegt ist oder nicht, gibt Array_Column () ein leeres Array zurück, wenn die Spalte nicht vorhanden ist.
PHP In der Entwurf der Funktion array_column () werden nicht existierende Spalten als "leere" Spalte behandelt, wodurch ein leeres Array zurückgegeben wird. Dies sorgt für die Konsistenz und Einfachheit der Funktionen und vermeidet unvorhersehbare Fehler während der Entwicklung.
Wenn die angegebenen Spalten in einigen Subtarrays fehlen, überspringt Array_Column () diese Subarrays automatisch, ohne sie einzubeziehen. Zum Beispiel:
$data = [
['id' => 1, 'name' => 'Alice'],
['id' => 2],
['id' => 3, 'name' => 'Charlie']
];
$names = array_column($data, 'name');
print_r($names);
Ausgangsergebnis:
Array
(
[0] => Alice
[2] => Charlie
)
Wie Sie sehen können, fehlt der Namensschlüssel im Subtarray mit ID 2 , sodass das Subtarray automatisch übersprungen wird.
Manchmal verwenden wir URLs als Teil des Arrays in unserem PHP -Code oder erhalten Daten von einer externen API und extrahieren bestimmte Spalten mit Array_Column () . In diesem Fall müssen möglicherweise einige Anforderungen an den Ersatz von Domainnamen behandelt werden. Zum Beispiel, wenn der Code Folgendes hat:
$data = [
['url' => 'https://example.com/page1'],
['url' => 'https://example.com/page2'],
['url' => 'https://example.com/page3']
];
$urls = array_column($data, 'url');
Wenn Sie den Domänennamen in der URL durch m66.net ersetzen möchten, können Sie die Funktion array_map () und str_replace () verwenden, um ihn zu implementieren:
$modified_urls = array_map(function($url) {
return str_replace('example.com', 'm66.net', $url);
}, array_column($data, 'url'));
print_r($modified_urls);
Ausgangsergebnis: