login  Naam:   Wachtwoord: 
Registreer je!
Scripts > PHP > Snippets > deleteFromArray


Reacties op het script deleteFromArray

Offline  Rik
Gepost op: 16 mei 2009 - 10:20
Gouden medailleGouden medaille

Crew algemeen




Dit kan zeker handig zijn en je hebt het net gescript, maar... er bestaat al een kant en klare functie voor:
PHP.net: array_diff

Offline  Bart
Gepost op: 16 mei 2009 - 10:48
PHP expert



Het enige verschil is, dat je bij array_diff 2 volwaardige arrays hebt en die met elkaar gaat vergelijken en dat uit array1 waarden worden verwijdert. Bij mijn functie geef je een specifieke array met waarden die verwijdert moeten worden.

Offline  avdg
Gepost op: 16 mei 2009 - 15:47
PHP gevorderde



Dit script gaat wel voor zorgen dat keys met dezelfde values ongewild gewist kunnen worden.

  1. $array = array('test' => 'test', 'hello' => 'test);


als je die array ga omkeren met array_flip (dus values worden keys en visa versa)
  1. $array = array_flip($array);


krijg je echter alleen de key 'hello' terug, dit komt omdat 'test' is overschreven, want hello had dezelfde waarde.

Oplossing: hmmm... iemand?

Edit: och, als je dit alleen maar voor 1-dimensionale arrays gebruikt

Offline  Bart
Gepost op: 16 mei 2009 - 15:51
PHP expert



Als je leest naar de omschrijving, dan wordt er gezegt dat er iets verwijdert wordt uit de array op basis van waarde, dus het is in dit geval logisch en niet gepast dat je dan deze functie gaat gebruiken.

Offline  Richard
Gepost op: 16 mei 2009 - 20:31
Crew algemeen



Is dit niet makkelijker met een foreach?

  1. <?php
  2. function deleteFromArray(array $array, array $remove) {
  3. $result = array();
  4. foreach($array as $key => $value) {
  5. if(!in_array($value, $remove)) {
  6. $result[$key] = $value;
  7. }
  8. }
  9. return $result;
  10. }

Offline  Bart
Gepost op: 16 mei 2009 - 22:12
PHP expert



Dus wat jij hierboven doet is eigenlijk niets anders dan een nieuwe array maken en vervolgens elke waarde nalopen of die niet gelijk is aan $remove? Als ie niet gelijk is aan $remove gooi je de waarde in de nieuwe array en vervolgens return je de nieuwe array?

Offline  Gerard
Gepost op: 17 mei 2009 - 01:48
Ouwe rakker



Ja, maar je bent er wel zeker van de je originele array gewoon intact wordt gelaten. Het flippen van de gegevens heeft inderdaad ongewilde effecten en je kan er niet op vertrouwen dat de array die je terug krijgt nog wel dezelfde is als die je ingaf. De functie is dus niet betrouwbaar.

Toen ik de functie zag was array_diff ook het eerste waar ik aan dacht. Het verschilt eigenlijk vrijwel niets met de functie die je hier hebt geplaatst, het feit dat je zelf vindt dat dit niet het geval is doet daar weinig aan af.

Ik ben dus nog niet helemaal overtuigd. Vooral omdat ik een eenmaal ingevoerde array niet meer kan vertrouwen.


Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.049s