[PHP] Element uit array verwijderen

Pagina: 1
Acties:
  • 230 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb de volgende array $arr
code:
1
2
3
4
5
6
7
Array
(
    [0] => 1
    [1] => 2
    [2] => 4
    [3] => 6
)

Nu wil ik de '4' uit de array halen. Met andere woorden, ik wil overhouden:
code:
1
2
3
4
5
6
Array
(
    [0] => 1
    [1] => 2
    [2] => 6
)

Op php.net heb ik gevonden dat ik een een element uit een array kan verwijderen door de key te unsetten:
PHP:
1
unset($arr[2]);

Maar het probleem is: ik wil aan de hand van de value een element uit de array halen (Ik weet zeker dat elke value in de array uniek is), maar ik kan niet vinden hoe dat moet. Iemand?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Hmm. NIet echt efficient, maar toch:

PHP:
1
2
3
4
5
foreach($array as $key => $value) {
    if($value == $search) {
        unset($array[$key]);
    }
}

Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
dan is dit toch makkelijker

PHP:
1
2
3
4
5
$arr = array( 0 => '1', 1 => '2', 2 => '4', 3 => '6' );

$value = array_search( 4,  $arr );

unset( $arr[$value] );


offtopic:
ik weet het niet zeker maar volgens mij unset je de hele array met de code van Dizzyweb



Raz- ? watnou als je niet zeker weet in welke index de waarde zit die je zoekt? :p ja dan is een array_search wel lekker handig

[ Voor 100% gewijzigd door Webgnome op 11-08-2004 01:05 ]

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Webgnome schreef op 11 augustus 2004 @ 01:02:
dan is dit toch makkelijker

PHP:
1
2
3
4
5
$arr = array( 0 => '1', 1 => '2', 2 => '4', 3 => '6' );

$value = array_search( 4,  $arr );

unset( $arr[$value] );
Zullen we dat even safe maken?

PHP:
1
2
3
4
5
$arr = array( 0 => '1', 1 => '2', 2 => '4', 3 => '6' );

$value = array_search( 4,  $arr );

if($value !== false) unset( $arr[$value] );

[edit]
Als je dat niet doet, en de waarde komt er niet in voor, dan retourneert array_search false, en dat wordt als waarde voor $arr[$value] als $arr[0] gelezen.

[ Voor 44% gewijzigd door Grijze Vos op 11-08-2004 01:27 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
Grijze Vos schreef op 11 augustus 2004 @ 01:26:
[...]

Zullen we dat even safe maken?

PHP:
1
2
3
4
5
$arr = array( 0 => '1', 1 => '2', 2 => '4', 3 => '6' );

$value = array_search( 4,  $arr );

if($value !== false) unset( $arr[$value] );

[edit]
Als je dat niet doet, en de waarde komt er niet in voor, dan retourneert array_search false, en dat wordt als waarde voor $arr[$value] als $arr[0] gelezen.
niet aan gedacht :>

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@Grijze Vos, Webgnome - dank je! Ik heb het inmiddels al werkend dankzij jullie voorbeeld. Goede nacht :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

unset is niet wat je wilt, want dan hou je dit over:
code:
1
2
3
4
5
6
Array
(
    [0] => 1
    [1] => 2
    [3] => 6
)

gebruik array_splice:
PHP:
1
array_splice($arr, $value, 1);

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Daarom doe je na een unset vaak een $arr = array_values($arr) :)

Acties:
  • 0 Henk 'm!

Verwijderd

Grijze Vos schreef op 11 augustus 2004 @ 01:26:
[...]

Zullen we dat even safe maken?

PHP:
1
2
3
4
5
$arr = array( 0 => '1', 1 => '2', 2 => '4', 3 => '6' );

$value = array_search( 4,  $arr );

if($value !== false) unset( $arr[$value] );

[edit]
Als je dat niet doet, en de waarde komt er niet in voor, dan retourneert array_search false, en dat wordt als waarde voor $arr[$value] als $arr[0] gelezen.
En als we nou de array

code:
1
$arr = array(true => 'blauw', false => 'geel');


hebben...? :p

Acties:
  • 0 Henk 'm!

  • Rostvertol-Mil
  • Registratie: Januari 2002
  • Laatst online: 15:42
DizzyWeb schreef op 11 augustus 2004 @ 00:53:
Hmm. NIet echt efficient, maar toch:

PHP:
1
2
3
4
5
foreach($array as $key => $value) {
    if($value == $search) {
        unset($array[$key]);
    }
}
Och, blijft redelijk efficient.
array_search loopt ook de hele array af en kijkt of ie gelijk is aan de needle.

dot.blaat


Acties:
  • 0 Henk 'm!

Verwijderd

Rostvertol-Mil schreef op 11 augustus 2004 @ 19:13:
Och, blijft redelijk efficient.
array_search loopt ook de hele array af en kijkt of ie gelijk is aan de needle.
Jah, maar array_search doet het in machinecode en de lus in geïnterpreteerde code.

  • 456
  • Registratie: April 2000
  • Niet online

456

Onze excuses voor het ongemak

Ik heb hetzelfde probleem, echter mijn array ziet er anders uit:
code:
1
2
3
4
5
6
7
Array
(
    [0]['bestemming'] => Amsterdam
    [1]['bestemming'] => Den Bosch
    [2]['bestemming'] => Nederland
    [3]['bestemming'] => Arnhem
)


Nu moet (zoals je ziet) Nederland ($land) eruit gehaald worden
Nu had ik gehoopt dat met de array_search functie ik Nederland wel zou kunnen vinden, en met de key verder werken.
Echter als ik de key even print (echo $key) krijg ik steevast niets te zien.

Werkt de array_search functie niet icm deze array?

EDIT: laat maar. Anders opgelost.
De bovenstaande array komt uit een mysql functie. Ik loop middels een foreach gewoon elk record na, en maak zo dus een nieuwe array aan (en laat de waarde $land uit de nieuw gemaakte array)
Ergo: probleem opgelost.

[ Voor 30% gewijzigd door 456 op 09-09-2004 12:57 ]

Een dag geen vertraging, is een dag niet gereisd


Verwijderd

456 schreef op 09 september 2004 @ 12:42:
Ik heb hetzelfde probleem, echter mijn array ziet er anders uit:
code:
1
2
3
4
5
6
7
Array
(
    [0]['bestemming'] => Amsterdam
    [1]['bestemming'] => Den Bosch
    [2]['bestemming'] => Nederland
    [3]['bestemming'] => Arnhem
)


Nu moet (zoals je ziet) Nederland ($land) eruit gehaald worden
Nu had ik gehoopt dat met de array_search functie ik Nederland wel zou kunnen vinden, en met de key verder werken.
Echter als ik de key even print (echo $key) krijg ik steevast niets te zien.

Werkt de array_search functie niet icm deze array?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// init
$array = array  (
        0 => array('bestemming' => 'Amsterdam'),
        1 => array('bestemming' => 'Den Bosch'),
        2 => array('bestemming' => 'Nederland'),
        3 => array('bestemming' => 'Arnehm')
        );

// search
foreach($array AS $key => $value) {
    if($value['bestemming'] == $search) {
        echo $key;
    }
}


Edit: wakker worden Ivy. Voor de medemens dan maar, zullen we zeggen.

[ Voor 15% gewijzigd door Verwijderd op 09-09-2004 12:57 ]


  • 456
  • Registratie: April 2000
  • Niet online

456

Onze excuses voor het ongemak

Verwijderd schreef op 09 september 2004 @ 12:57:
[...]


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// init
$array = array  (
        0 => array('bestemming' => 'Amsterdam'),
        1 => array('bestemming' => 'Den Bosch'),
        2 => array('bestemming' => 'Nederland'),
        3 => array('bestemming' => 'Arnehm')
        );

// search
foreach($array AS $key => $value) {
    if($value['bestemming'] == $search) {
        echo $key;
    }
}


Edit: wakker worden Ivy. Voor de medemens dan maar, zullen we zeggen.
:>

Een dag geen vertraging, is een dag niet gereisd


Verwijderd

offtopic:
Altijd leuk; die volgorde van: 1) quoten van org. post, 2) replyen op org. post, 3) org. post wordt ge-edit, 4) reply wordt gepost - en het gevolg daarvan. Gebeurd vaker hier geloof ik :)
Pagina: 1