[PHP] Row verwijderen uit array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor mijn shopping cart systeem gebruik ik een array. In deze array staan de volgende velden: Pid (product id) en Qty. Nu moet een gebruiker natuurlijk een item uit de winkelwagen kunnen halen. Hoe krijg ik dit voor elkaar?
Als ik unset() gebruik, verwijderd ie alleen maar de waarde, en niet de row.

En dat staat gek als je de shopping cart details bekijkt...

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

it's all in the manual: array_splice()

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

ik zou het met een unset() doen, en een controle OF er wel iets in je row staat.
Niet de meest nette manier, maar werkt wel :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
$key_index = array_keys(array_keys($array), $target_key); 
array_splice($array, $key_index[0], 1);


Gevonden op http://nl.php.net/manual/en/function.array-splice.php..
tnx crisp

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Vreemd.. als ik unset() gebruik istie toch echt weg uit de array zoals het hoort :?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<body>
<?php
$arr = array (1, 2, 3, 4, 5, 6, 7, 8, 9);

echo "<pre>";
print_r ($arr);
echo "</pre><br><br>";

unset ($arr[5]);

echo "<pre>";
print_r ($arr);
echo "</pre><br><br>";
?>
</body>
</html>


PHP 4.3.1 trouwens :)

[ Voor 4% gewijzigd door Bosmonster op 28-05-2003 11:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ik gebruik ook altijd unset. Hoewel het in de praktijk eigenlijk weinig voorkomt dat ik iets uit een array wil gooien, maar dat zal wel toeval zijn. array_splice is volgens de manual Remove a portion of the array and replace it with something else. Oftwel replacen, heb die functie nooit zelf gebruikt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
shit.. beetje dom van mij.. ik deed unset($cart[$cartrow]['pid']).. stom stom stom.

unset($cart[$cartrow]) werkt natuurlijk wel..
Zie http://www.berkenpeis.nl/nieuw/shop/

[ Voor 8% gewijzigd door Verwijderd op 28-05-2003 11:28 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Verwijderd schreef op 28 May 2003 @ 11:24:
ik gebruik ook altijd unset. Hoewel het in de praktijk eigenlijk weinig voorkomt dat ik iets uit een array wil gooien, maar dat zal wel toeval zijn. array_splice is volgens de manual Remove a portion of the array and replace it with something else. Oftwel replacen, heb die functie nooit zelf gebruikt.
array_splice() is wel handig als je een groter gedeelte van een array kwijt wil, anders moet je door heel de array heenlopen en alles per stuk unsetten.

De replacement is maar optioneel en kan me ook weinig voorstellen dat dat veel gebruikt wordt. MAar de functie is dus dubbel te gebruiken :)

[ Voor 12% gewijzigd door Bosmonster op 28-05-2003 15:20 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Bosmonster schreef op 28 mei 2003 @ 15:19:
[...]


array_splice() is wel handig als je een groter gedeelte van een array kwijt wil, anders moet je door heel de array heenlopen en alles per stuk unsetten.

De replacement is maar optioneel en kan me ook weinig voorstellen dat dat veel gebruikt wordt. MAar de functie is dus dubbel te gebruiken :)
er is een wezenlijk verschil tussen het unsetten van een array element, en het gebruik van array_splice:

unset ($arr[5]);
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [6] => 7
    [7] => 8
    [8] => 9
)


array_splice($arr,5,1);
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 7
    [6] => 8
    [7] => 9
)


dus het ligt maar net aan je toepassing...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
crisp schreef op 28 May 2003 @ 15:30:
[...]

er is een wezenlijk verschil tussen het unsetten van een array element, en het gebruik van array_splice:

unset ($arr[5]);
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [6] => 7
    [7] => 8
    [8] => 9
)


array_splice($arr,5,1);
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 7
    [6] => 8
    [7] => 9
)


dus het ligt maar net aan je toepassing...
Kijk nog eens naar je code, ik vermoed dat je met tiepen een foutje hebt gemaakt (-: Je haalt wel de 6e cel weg, maar de inhoud blijft hetzelfde maar verschoven naar een andere plek in het array...?!

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Klopt toch? En neem aan dat ie het niet overgetypt heeft, maar geknipt en geplakt ;)

[ Voor 77% gewijzigd door Bosmonster op 28-05-2003 15:37 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Rotjeknor schreef op 28 May 2003 @ 15:35:
[...]

Kijk nog eens naar je code, ik vermoed dat je met tiepen een foutje hebt gemaakt (-: Je haalt wel de 6e cel weg, maar de inhoud blijft hetzelfde maar verschoven naar een andere plek in het array...?!
ehm
met array_splice wordt je array hernummerd ;)
en met unset wordt hij gewoon gedelete ;)
dat is het verschil :)

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Als je iets doet in de trant van:

PHP:
1
2
3
4
5
6
7
8
9
10
error_reporting( E_ALL );

$theUnsetArray  = range( 0, 9 );
$theSpliceArray = range( 0, 9 );

unset( $theUnsetArray[ 5 ] );
array_splice( $theSpliceArray, 5, 1 );

for( $i = 0; $i < 9; $i++ )
   printf( "%d %d %d\n", $i, $theSpliceArray[ $i ], $theUnsetArray[ $i ] );


Warnings geven wel aan waar het probleem zit :D

Acties:
  • 0 Henk 'm!

  • Expander
  • Registratie: Februari 2001
  • Niet online
crisp schreef op 28 May 2003 @ 15:30:
[behulpzaam]

dus het ligt maar net aan je toepassing...
Dus bij een unset() zou bij bovenstaand voorbeeld de_array[5] null geven?

Expanding the inexpandable


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Expander schreef op 28 May 2003 @ 15:50:
[...]

Dus bij een unset() zou bij bovenstaand voorbeeld de_array[5] null geven?
nee een warning ;)
Pagina: 1