[PHP] Record uit een array verwijderen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • G F0rce 1
  • Registratie: Juli 2003
  • Laatst online: 04-03-2015
Hey,
Ik ben bezig met het maken van een kleine webshop. Ik zit alleen met het volgende probleem. Wanneer iemand een product selecteerd om te kopen wordt het id van het product samen met het aantal in een array gestopt.
Het array ziet er als volgt uit.

code:
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
27
Array
(
    [1] => Array
        (
            [iid] => 10428
            [quantity] => 1
        )

    [2] => Array
        (
            [iid] => 10429
            [quantity] => 1
        )

    [3] => Array
        (
            [iid] => 10431
            [quantity] => 35
        )

    [4] => Array
        (
            [iid] => 10439
            [quantity] => 3
        )

)

Waarin in iid staat voor ItemID.

Nu heb ik de volgende functie gemaakt om een product uit deze array te verwijderen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function delete_from_array($array,$record_to_delete){
$tmp    = array();
$k      = 1;
    for ($i = 1; $i < sizeof($array) ; $i++) {
        if($array[$i][iid] != $record_to_delete){
            $tmp[$k][iid]       = $array[$i][iid];
            $tmp[$k][quantity]  = $array[$i][quantity];
            $k++;
        }       
    }
     return $tmp;
}


Dit gaat goed tot het moment dat ik een record verwijder wat niet aan het eind van de array staat. Als ik uit bovenstaand voorbeeld bijvoorbeeld iid 40431 wil verwijderen geeft deze functie als output:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [1] => Array
        (
            [iid] => 10428
            [quantity] => 1
        )

    [3] => Array
        (
            [iid] => 10429
            [quantity] => 1
        )

)


iid 39 die erna komt valt dus ook weg. Ik krijg het dus niet voor elkaar om een tussenliggende product te verwijderen. Misschien dat iemand mij weer op weg kan helpen wat ik snap er werkelijk niets meer van.
Volgens mij zou het moeten kloppen, onderandere omdat ik al een aparte counter ( $k ) gebruik voor mijn tijdeleijke array ( $tmp ).
Als er iemand suggesties heeft graag :) .

[ Voor 3% gewijzigd door G F0rce 1 op 08-12-2004 13:58 ]

I feel absolutely clean inside, and there is nothing but pure euphoria. - Alexander Shulgin


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Even een offtopic-vraagje: waarom maak je niet een array gebaseerd op itemId? Dat maakt het checken, updaten, toevoegen en verwijderen een stuk makkelijker?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • G F0rce 1
  • Registratie: Juli 2003
  • Laatst online: 04-03-2015
BtM909 schreef op woensdag 08 december 2004 @ 14:01:
Even een offtopic-vraagje: waarom maak je niet een array gebaseerd op itemId? Dat maakt het checken, updaten, toevoegen en verwijderen een stuk makkelijker?
Daar had ik inderdaad beter voor kunnen kiezen, maar dat is nu wat te laat. Het zou heel veel aanpassing vergen om dat in het huidige stadium door te voeren.

offtopic:
w00t 1337'ste post :Y)

I feel absolutely clean inside, and there is nothing but pure euphoria. - Alexander Shulgin


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

G F0rce 1 schreef op woensdag 08 december 2004 @ 14:03:
[...]


Daar had ik inderdaad beter voor kunnen kiezen, maar dat is nu wat te laat. Het zou heel veel aanpassing vergen om dat in het huidige stadium door te voeren.

offtopic:
w00t 1337'ste post :Y)
Dan moet je eens kijken naar unset. Dus eerst zoeken totdat je dat array-item hebt gevonden en dan unset uitvoeren op dat array-item.

[ Voor 12% gewijzigd door BtM909 op 08-12-2004 14:06 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • ramonp
  • Registratie: Januari 2001
  • Laatst online: 19-09 10:35
idd, dan kan je iets van unset(array[3]);doen.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Kan je niet die array doorlopen en het record unsetten wat je niet nodig hebt, ipv opnieuw die array te bouwen?

/spuit11

[ Voor 6% gewijzigd door Erkens op 08-12-2004 14:07 ]


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

BtM909 schreef op woensdag 08 december 2004 @ 14:05:
[...]


Dan moet je eens kijken naar unset. Dus eerst zoeken totdat je dat array-item hebt gevonden en dan unset uitvoeren op dat array-item.
Juist. Veel en veel sneller bovendien.

De fout in de startpost zit 'm overigens in de for-loop: je begint bij 1 en gaat door tot <4 ofwel 3, dus je telt tot het aantal elementen - 1. Je kopieert het laatste element dus niet. Als je <= in plaats van < gebruikt doet 'ie het wel goed :)


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • G F0rce 1
  • Registratie: Juli 2003
  • Laatst online: 04-03-2015
ramonp schreef op woensdag 08 december 2004 @ 14:07:
[...]


idd, dan kan je iets van unset(array[3]);doen.
Dat heb ik inderdaad geprobeerd, maar wanneer je dat doet, blijft het probleem exact hetzelfde, het record is wel uit de array maar alles wat na dat het verwijderde iid komt is nog steeds weg.

I feel absolutely clean inside, and there is nothing but pure euphoria. - Alexander Shulgin


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Rataplan schreef op woensdag 08 december 2004 @ 14:11:
[...]
Juist. Veel en veel sneller bovendien.

De fout in de startpost zit 'm overigens in de for-loop: je begint bij 1 en gaat door tot <4 ofwel 3, dus je telt tot het aantal elementen - 1. Je kopieert het laatste element dus niet. Als je <= in plaats van < gebruikt doet 'ie het wel goed :)
daarom is foreach ook zo erg handig bij dit soort dingen :)

Acties:
  • 0 Henk 'm!

  • G F0rce 1
  • Registratie: Juli 2003
  • Laatst online: 04-03-2015
Rataplan schreef op woensdag 08 december 2004 @ 14:11:
[...]
... Als je <= in plaats van < gebruikt doet 'ie het wel goed :)
_/-\o_ Dat was het dus. Sjesus wat stom maar nu werkt het. In ieder geval werkt unsetten nog steeds niet maar op deze manier werkt het. Bedankt :) !

I feel absolutely clean inside, and there is nothing but pure euphoria. - Alexander Shulgin


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

G F0rce 1 schreef op woensdag 08 december 2004 @ 14:17:
In ieder geval werkt unsetten nog steeds niet
Welles! Icm wat Erkens zegt, zoiets:
PHP:
1
2
3
4
5
6
7
function delete_from_array($array,$record_to_delete)
{ 
    foreach($array as $index=>$element)
        if($element[iid]==$record_to_delete)
            unset($array[$index]);
    return $array; 
}
Bedankt :) !
:>


Journalism is printing what someone else does not want printed; everything else is public relations.

Pagina: 1