In PHP ist Array_flip () eine sehr bequeme Funktion, mit der Arrays eingefügt werden können. Es klingt sehr einfach und praktisch, aber Sie müssen vorsichtig sein, wenn Sie es verwenden, insbesondere wenn ein Array Objekte enthält. In diesem Artikel wird untersucht, warum Arrays, die Objekte enthalten, nicht mit Array_flip () verarbeitet werden können und welche Probleme dabei auftreten.
$input = [
'apple' => 'red',
'banana' => 'yellow',
];
$flipped = array_flip($input);
print_r($flipped);
Ausgabe:
Array
(
[red] => apple
[yellow] => banana
)
Wie oben gezeigt, werden Schlüsselwertpaare ausgetauscht, kein Problem. Bitte beachten Sie jedoch einen Schlüsselpunkt: Der umgedrehte Schlüssel muss ein legaler Array -Schlüssel sein , dh der int- oder String -Typ.
Schauen wir uns ein Beispiel mit Objekten an:
class User {
public $name;
function __construct($name) {
$this->name = $name;
}
}
$user1 = new User('Alice');
$user2 = new User('Bob');
$array = [
'u1' => $user1,
'u2' => $user2,
];
$flipped = array_flip($array);
Beim Ausführen dieses Codes wirft PHP eine Warnung oder sogar einen tödlichen Fehler auf:
Warning: array_flip(): Can only flip STRING and INTEGER values!
Warum? Da Objekte nicht als Schlüssel für Arrays verwendet werden können. Die Schlüsselarten von Arrays in PHP sind durch Ganzzahlen und Zeichenfolgen begrenzt. Objekte (einschließlich anonymer Klassen) sind keine rechtlichen Schlüsseltypen.
$array = [
'a' => 'apple',
'b' => new stdClass(),
'c' => 'carrot'
];
$flipped = array_flip($array);
Ausgabe:
Warning: array_flip(): Can only flip STRING and INTEGER values!
Auch wenn nur ein Wert ein Objekt ist, fällt die gesamte array_flip () -Operation fehl. Dies führt dazu, dass Sie alle Ihre Daten oder Programmunterbrechungen verlieren.
Wenn Sie ein Array mit Objekten umdrehen müssen, müssen Sie diesen Vorgang normalerweise manuell verarbeiten. Beispielsweise können Sie ein umgekehrtes Array manuell basierend auf einer bestimmten Eigenschaft des Objekts erstellen:
$array = [
'u1' => new User('Alice'),
'u2' => new User('Bob'),
];
$flipped = [];
foreach ($array as $key => $user) {
if ($user instanceof User) {
$flipped[$user->name] = $key;
}
}
print_r($flipped);
Ausgabe:
Array
(
[Alice] => u1
[Bob] => u2
)
Auf diese Weise können Sie die Funktion "Flip" basierend auf einer eindeutigen Eigenschaft des Objekts implementieren, anstatt array_flip () direkt zu verwenden.
Array_flip () ist ein leistungsstarkes Werkzeug, aber es ist nicht allmächtig. Wenn ein von Ihnen verarbeiteter Array Objekte oder andere Datentypen enthält, die nicht als Schlüssel (z. B. Arrays, Ressourcen usw.) verwendet werden können, wirft es einen Fehler aus oder unterbricht sogar das Skript. Um die Robustheit des Codes zu gewährleisten, sollten Sie den Wert des Wertes vor dem Aufrufen immer bestätigen oder eine fehlertolerantere Alternative verwenden.