Ich habe ein PHP-Array, das ungefähr so aussieht:
Index Key Value
[0] 1 Awaiting for Confirmation
[1] 2 Assigned
[2] 3 In Progress
[3] 4 Completed
[4] 5 Mark As Spam
Wenn ich die Array-Werte var_dump bekomme, bekomme ich Folgendes:
array(5) { [0]=> array(2) { ["key"]=> string(1) "1" ["value"]=> string(25) "Awaiting for Confirmation" } [1]=> array(2) { ["key"]=> string(1) "2" ["value"]=> string(9) "Assigned" } [2]=> array(2) { ["key"]=> string(1) "3" ["value"]=> string(11) "In Progress" } [3]=> array(2) { ["key"]=> string(1) "4" ["value"]=> string(9) "Completed" } [4]=> array(2) { ["key"]=> string(1) "5" ["value"]=> string(12) "Mark As Spam" } }
Ich wollte Completed entfernen und als Spam markieren . Ich weiß, dass ich es kann unset[$array[3],$array[4])
, aber das Problem ist, dass die Indexnummer manchmal unterschiedlich sein kann.
Gibt es eine Möglichkeit, sie zu entfernen, indem der Wertname anstelle des Schlüsselwerts abgeglichen wird?
Antworten:
Ihr Array ist ziemlich seltsam: Warum nicht einfach den
key
as-Index und denvalue
as ... -Wert verwenden?Wäre es nicht viel einfacher, wenn Ihr Array so deklariert würde:
Auf diese Weise können Sie Ihre Werte
key
als Indizes verwenden, um auf das Array zuzugreifen ...Und Sie können Funktionen verwenden, um nach den Werten zu suchen, wie zum Beispiel
array_search()
:Einfacher als mit Ihrem Array, nein?
Stattdessen mit Ihrem Array, das so aussieht:
Sie müssen alle Elemente
value
durchlaufen, um die richtigen Elemente zu analysieren und zu deaktivieren:Selbst wenn dies möglich ist, ist es nicht so einfach ... und ich bestehe darauf: Können Sie das Format Ihres Arrays nicht ändern, um mit einem einfacheren Schlüssel- / Wertesystem zu arbeiten?
quelle
quelle
Für 2D-Arrays ...
quelle
Sie können dies verwenden
quelle
Warum nicht array_diff verwenden?
Beachten Sie nur, dass Ihr Array neu indiziert wird.
quelle
Versuche dies:
/ edit Wie von JohnP erwähnt, funktioniert diese Methode nur für nicht verschachtelte Arrays.
quelle
So können Sie Ihr verschachteltes Zielarray in einem einzigen Schritt in ein nicht verschachteltes Array kopieren. Löschen Sie die Schlüssel und weisen Sie dann dem verschachtelten Knoten des früheren Arrays das endgültig zugeschnittene Array zu. Hier ist ein Code, um es einfach zu machen:
quelle
Ich bin mit der akzeptierten Antwort nicht einverstanden. Manchmal möchte eine Anwendungsarchitektur nicht, dass Sie mit der Array-ID herumspielen, oder macht es unpraktisch. Zum Beispiel verwende ich CakePHP ziemlich oft, und eine Datenbankabfrage gibt den Primärschlüssel als Wert in jedem Datensatz zurück, sehr ähnlich wie oben.
Angenommen, das Array ist nicht dumm groß, würde ich array_filter verwenden. Dadurch wird eine Kopie des Arrays erstellt, abzüglich der Datensätze, die Sie entfernen möchten, und die Sie der ursprünglichen Arrayvariablen zurückweisen können.
Obwohl dies ineffizient erscheinen mag, ist es heutzutage sehr angesagt, dass Variablen unveränderlich sind, und die Tatsache, dass die meisten PHP-Array-Funktionen ein neues Array zurückgeben, anstatt mit dem Original zu fummeln, impliziert, dass PHP dies auch von Ihnen verlangt. Und je mehr Sie mit Arrays arbeiten und erkennen, wie schwierig und nervig die Funktion unset () ist, desto sinnvoller ist dieser Ansatz.
Wie auch immer:
Sie können eine beliebige Einschlusslogik (z. B. Ihr ID-Feld) in der gewünschten eingebetteten Funktion verwenden.
quelle
für Single Array Item verwenden
reset($item)
quelle