Array_combine empfängt zwei Arrays als Parameter, das erste Array als Schlüssel und das zweite Array als Wert. Wenn die beiden Arrays unterschiedliche Längen haben, wird eine Warnung geworfen und falsch zurückgegeben.
$keys = ['name', 'email', 'age'];
$values = ['Alice', '[email protected]', 30];
$result = array_combine($keys, $values);
// Ausgabe:['name' => 'Alice', 'email' => '[email protected]', 'age' => 30]
print_r($result);
Im Vergleich zur traditionellen Foreach -Schreibmethode ist diese Methode kompakter und der Code lesbarer.
Die Verwendung von Foreach zum Aufbau von assoziativen Arrays ist ebenfalls ein gemeinsamer Weg, der Code lautet wie folgt:
$keys = ['name', 'email', 'age'];
$values = ['Alice', '[email protected]', 30];
$result = [];
foreach ($keys as $index => $key) {
$result[$key] = $values[$index];
}
Der Vorteil dieses Ansatzes ist seine Flexibilität und kann während des Erstellungsprozesses eine logische Verarbeitung hinzufügen, z. B. das Formatieren von Daten oder das Überspringen bestimmter Werte.
Wenn aus Sicht der Leistung eine interne Funktion ist, die in der C -Sprache implementiert ist, ist Array_combine und es gibt fast keine Lücke beim Umgang mit kleinen Datenmengen. Aber im Umgang mit großen Arrays (z. B. Tausende von Schlüsselwertpaaren) ist es normalerweise etwas besser als manuell für die Eehr .
Leistungsverbesserungen sind jedoch keine Größenordnung und sind in Millionen von Iterationen in der Regel offensichtlich. Hier ist ein einfaches Beispiel für einen Benchmark (nur als Referenz):
$keys = range(1, 100000);
$values = range(100001, 200000);
// verwenden array_combine
$start = microtime(true);
array_combine($keys, $values);
echo 'array_combine: ' . (microtime(true) - $start) . "s\n";
// verwenden foreach
$start = microtime(true);
$result = [];
foreach ($keys as $i => $key) {
$result[$key] = $values[$i];
}
echo 'foreach: ' . (microtime(true) - $start) . "s\n";
In den meisten Fällen wird Array_combine etwas besser sein, aber der Unterschied zwischen beiden wird 5-10%nicht überschreiten.
Wenn Sie sicher sind, dass die beiden Arrays die gleiche Länge haben und die Datenstruktur stabil ist, ist die Verwendung von Array_combine eine intelligentere Wahl, nicht nur der Code kürzer, sondern die Fehlerwahrscheinlichkeit ist gering.
$userFields = ['id', 'name', 'email'];
$userData = [101, 'John Doe', '[email protected]'];
$user = array_combine($userFields, $userData);
Wenn es eine Möglichkeit einer Datenkonsistenz besteht, z. B. ein von der Datenbank zurückgegebener Array und eine andere Eingabe des Benutzers, wird empfohlen, Foreach zu verwenden und die Überprüfungslogik hinzuzufügen:
$result = [];
$minLength = min(count($keys), count($values));
for ($i = 0; $i < $minLength; $i++) {
$result[$keys[$i]] = $values[$i];
}
Oder anschließende Fehlerbehebung anschließend:
if (count($keys) !== count($values)) {
error_log("Inkonsistente Arraylänge: keys(" . count($keys) . "), values(" . count($values) . ")");
}
In einigen Fällen können Sie gleichzeitig Array_Map und Array_combine verwenden, um die Kettenverarbeitungsleistung zu verbessern:
$raw = ['John', '[email protected]', 28];
$keys = ['name', 'email', 'age'];
$user = array_combine($keys, array_map('trim', $raw));
Diese Methode ist sowohl präzise als auch nistet die Datenvorverarbeitungslogik.