Reacties op het script deleteFromArray
|
Gepost op: 16 mei 2009 - 10:20 |
|
|
|
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 |
|
|
|
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. |
|
|
|
Gepost op: 16 mei 2009 - 15:47 |
|
|
|
PHP gevorderde
|
Dit script gaat wel voor zorgen dat keys met dezelfde values ongewild gewist kunnen worden.
$array = array('test' => 'test', 'hello' => 'test);
$array = array('test' => 'test', 'hello' => 'test);
als je die array ga omkeren met array_flip (dus values worden keys en visa versa)
$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 |
|
|
|
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. |
|
|
|
Gepost op: 16 mei 2009 - 20:31 |
|
|
|
Crew algemeen
|
Is dit niet makkelijker met een foreach?
<?php
function deleteFromArray(array $array, array $remove) {
$result = array();
foreach($array as $key => $value) {
if(!in_array($value, $remove)) {
$result[$key] = $value;
}
}
return $result;
}
<?php function deleteFromArray (array $array, array $remove) { foreach($array as $key => $value) { $result[$key] = $value; } } return $result; }
|
|
|
|
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? |
|
|
|
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. |
|
|
|