Versio

Arrayelementen wissen

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

BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  

PHP script bestanden

  1. arrayelementen-wissen

 

8 reacties op 'Arrayelementen wissen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Reen
Reen
5 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
5 jaar geleden
 
0 +1 -0 -1
Klopt! Goed gezien ;-) Heb je er ook zo een voor een array met numerieke indexen?
Noppes
Noppes
5 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.


5 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
5 jaar geleden
 
0 +1 -0 -1
Mooi, liep recentelijk ook al tegen dit probleem aan
Reen
Reen
5 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
5 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.
Toby hinloopen
toby hinloopen
4 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.

  • Labels
  • Geen tags toegevoegd.