Arrayelementen wissen

Door Jan Koehoorn, 14 jaar geleden, 2.944x bekeken

Hallo PHP vrienden,

laatst had ik in een script nodig dat ik een gegeven element uit een array wilde kunnen verwijderen. Wat schetst mijn verbazing? Daar is geen handige standaardfunctie voor! Je hebt array_shift (om het eerste element te verwijderen), array_slice (om een "plakje" te verwijderen, maar dan moet je de offset weten!), array_pop (om het laatste element te verwijderen), maar er is geen functie om een bepaalde value of een bepaalde key te wissen!

Na een korte zoekactie kwam ik deze twee tegen:

Voorbeeld: http://nvt

Gesponsorde koppelingen

PHP script bestanden

  1. arrayelementen-wissen

 

Er zijn 8 reacties op 'Arrayelementen wissen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Reen
Reen
14 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$array
= array_remove_key($array, $key);
// Is hetzelfde als:
unset($array[$key]);
?>
Jan Koehoorn
Jan Koehoorn
14 jaar geleden
 
0 +1 -0 -1
Klopt! Goed gezien ;-) Heb je er ook zo een voor een array met numerieke indexen?
Noppes
Noppes
14 jaar geleden
 
0 +1 -0 -1
daar kan je array_search toch voor gebruiken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
ini_set('display_errors',1);
$arr = array('rood','groen','geel');
var_dump($arr);
$keyPos = array_search('groen',$arr);  //keyPos = 1
echo $keyPos;

if ($keyPos !== false) {
   unset($arr[$keyPos]);
}

var_dump($arr);
$arr = array('rood','groen','geel');
$keyPos = array_search('rood',$arr);  //keyPos = 1
if ($keyPos !== false) {
   unset($arr[$keyPos]);
}

var_dump($arr);

$arr = array('rood','groen','geel');
$keyPos = array_search('blauw',$arr);  //keyPos = 1
if ($keyPos !== false) {
   unset($arr[$keyPos]);
}

var_dump($arr);

?>


---
resultaat:
array(3) {
[0]=>
string(4) "rood"
[1]=>
string(5) "groen"
[2]=>
string(4) "geel"
}
1
array(2) {
[0]=>
string(4) "rood"
[2]=>
string(4) "geel"
}
array(2) {
[1]=>
string(5) "groen"
[2]=>
string(4) "geel"
}
array(3) {
[0]=>
string(4) "rood"
[1]=>
string(5) "groen"
[2]=>
string(4) "geel"
}
---
en nog netter is als je array_search(mixed,array,true) doet...

Sta er dan wel stil bij dat je moet zoeken op de gehele value om te voorkomen dat er een verkeerde key-index verwijderd wordt.


14 jaar geleden
 
0 +1 -0 -1
echt verwijderen is het niet :+ aangezien er gewoon een nieuwe array word gemaakt waarbij :P
Jan geen
Jan geen
14 jaar geleden
 
0 +1 -0 -1
Mooi, liep recentelijk ook al tegen dit probleem aan
Reen
Reen
14 jaar geleden
 
0 +1 -0 -1
@Jan Koehoorn:
Dit werkt ook voor numerieke indexen, het enige nadeel is dat je een key mist:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$blaat
= array('a', 'b', 'c', 'd');
unset($blaat[1]);
print_r($blaat);
/*
Array
(
    [0] => a
    [2] => c
    [3] => d
)
*/

?>


Het gebruiken van een for loop is dan niet meer mogelijk omdat key 1 mist. foreach werkt wel.

@Noppes:
Nee array_search vind maar 1 waarde. Als er dus twee keer groen in een array staat wordt alleen de eerste verwijderd in jou script.

Je zou array_keys($array, $value); moeten gebruiken die een array returned met alle key' s waarvan de waarde $value is.
Iisys
iisys
14 jaar geleden
 
0 +1 -0 -1
Hier liep ik laatst ook tegen aan, maar dan met een multidimensionale array. Ik zal mijn eigengemaakte functie ook even bij de snippets zetten.
Het gaat bij mij om het aanpassen óf het verwijderen van een multidimensionale array, en dan specifiek alleen de dieper gelegen keys die je opgeeft.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Toby hinloopen
toby hinloopen
13 jaar geleden
 
0 +1 -0 -1
Ik vond het ook al raar dat zo'n functie er niet was dus had het zelf ooit maar gemaakt.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. arrayelementen-wissen

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.