[PHP] 2 arrays met elkaar vergelijken en dingen aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben voorheen nog nooit in het programming forum geweest, maar nu ineens 3 keer in anderhalve week :-) ik probeer me PHP onder de knie te krijgen, maar stuit regelmatig, zoals het hoort vind ik, op dingen waar ik niet uit kom.
Meestal kom ik er met php.net wel uit, maar nu heb ik iets waar ik echt niet uit kom.

Ik ben bezig met een soort webwinkeltje voor een vriend van m'n pa en nu heb ik eigenlijk al zon beetje alles voor elkaar, behalve de winkelwagen, waar ik nu dus mee aan het knutselen ben.


situatie:

Vanuit een rij met producten heb ik devolgende link: winkelwagen.php?bestel=1
Waarbij 1 het id is van het product, natuurlijk.

In winkelwagen.php kijk ik of er een $_GET[bestel] is meegegeven, en indien ja, roep ik een functie aan die in een sessie 2 arrays opbouwt.
array 1 = alle product id's die in het winkelwagentje zijn geplaatst, dus bijvoorbeeld 23, 175 of 182
array 2 = de hoeveelheden van deze id's, dus bijvoorbeeld 3, 6 of 8

Wanneer ik array 1 uitlees uit de sessie krijg ik:

code:
1
2
3
4
5
Array (
  [0] => 12
  [1] => 89
  etc.
)


Wanneer ik array 2 uitlees krijg ik:

code:
1
2
3
4
5
Array (
  [0] => 1
  [1] => 1
  etc.
)


Omdat je vanuit de lijst enkel op 'bestel' kunt klikken, komt er de eerste keer in de array een 1 bij.

Om nu verder te gaan, zou ik graag willen dat wanneer men op bestel klikt in de lijst, er gegeken wordt of in array 1 het ID voorkomt en dat hij dan in de bijbehorende key in array 2 het getal verhoogt met +1.

Ik krijg alleen met geen mogelijkheid gevonden hoe ik 2 arrays kan combineren en hoe ik bijvoorbeeld in een array slechts een enkel ding kan wijzigen.

Een verdere stap is dalijk, het verwijderen van dingen uit de winkelwagen.
Hoe kan ik dalijk, wanneer men een ID verwijdert uit array 1, ook de hoeveelheid van dezelfde key verwijderen uit array 2 ??

Ik kom er niet uit, misschien dat jullie me op weg kunnen helpen?
Ik vraag niet om volledige oplossingen, want dan leer ik natuurlijk zelf niets :) Ik zou gewoon graag een methode willen weten, hoe ik nu verder kan.

Alvast bedankt!!

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 20-09 23:15

NetForce1

(inspiratie == 0) -> true

dan heb ik een zoekwoord voor je (of eigenlijk twee ;) ): multidimensional arrays
edit: de oplossing van Face_-_LeSS, een hash table, is nog beter natuurlijk, alleen kom je dan in de knel als je de volgorde van bestellen aan wilt houden in je winkelwagen.

[ Voor 51% gewijzigd door NetForce1 op 19-02-2008 15:04 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je de functies array_search() en unset() nodig hebt. Als je nog meer hulp nodig hebt zeg je het maar, maar omdat je zelf graag de oplossing wou zoeken zeg ik maar niet te veel. ;)

Jelco

Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Knal alles gewoon in één array.
Deze structuur:

array( 'product id' => 'aantal')

dan krijg je

[12] => 1
[89] => 1
enz

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank jullie wel voor de snelle antwoorden.
Ik heb even naar multidimensional arrays gekeken, het ziet er moeilijk uit, maar het lijkt me in princiepe hetzelfde werken.

Volgens mij krijg ik dan iets als:
code:
1
2
3
4
5
6
array (
  [id] = 12
     array (
        [aantal] = 1
     )
)


als ik het goed begrepen heb.

Als ik FaceLess volg, dan wordt het misschien voor mij, als beginner iets eenvoudiger.
Dan ga ik werken met zogenaamde array key strings, toch?
Dan noem ik gewoon een array key naar een id, dit is mogelijk, omdat een id toch maar 1 keer voorkomt.

Array_search en unset zal ik in alle gevallen moeten gebruiken, lijkt me.
Maar is het zo, dat als ik ergens eentje bij op wil tellen, dat ik dan eerst moet unsetten en dan gewoon een nieuwe moet toevoegen?

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 20-09 23:15

NetForce1

(inspiratie == 0) -> true

Je hoeft niet te unsetten, je overschrijft de oude waarde gewoon.
PHP:
1
2
3
$array[id] = $newCount;
// of als je alleen wilt incrementen met een werkt dit misschien ook wel:
$array[id]++;

[ Voor 50% gewijzigd door NetForce1 op 19-02-2008 15:12 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Aangezien je op dit punt met data aan het werken bent die toch niet erg snel zal veranderen, kan je best alles alvast opslaan in je session. Hiermee bedoel ik productomschrijving en naam. Scheelt SQL queries bij het bakken van je overzicht.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In princiepe maakt dat aantal queries in het overzicht mij niet zo heel veel uit.
Ik heb maar 1 type product, wijn.. en die zit allemaal in 1 tabel, dus met 1 enkele querie heb ik alles te pakken wat ik met mijn overzicht nodig heb :-)

Ik kom er alleen niet uit hoe ik dit voor elkaar krijg [12] => 1
Als ik array_push doe, dan heb ik geen mogelijkheid om die 12 in te stellen.

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 20-09 23:15

NetForce1

(inspiratie == 0) -> true

Je hoeft ook geen array_push te gebruiken, dat is alleen om elementen aan het einde van een array toe te voegen. Elementen van arrays kun je gelijk benaderen dmv de []-notatie, als je bijv. element 12 wilt aanpassen doe je:
PHP:
1
$array[12] = $waarde;
Voor 12 kun je natuurlijk ook weer een andere variabele gebruiken, $id bijv:
PHP:
1
$array[$id] = $waarde;

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thanks NetForce1 :-)
Ik zit net op de bank de hele tijd te proberen, ineens had ik het voor elkaar :-) desalniettemin, bedankt voor je antwoord.

Ik weet nu precies hoe ik een array aanmaak in een session, een id toevoeg, een waarde daarvan kan aanpassen en hoe ik een id kan verwijderen.

Ik zou toch zweren dat het nu moet lukken om die winkelwagen in elkaar te knutselen ;-) ik ga aan de slag :) bedankt!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
He jongens, alles is gelukt.
Ik kan nu producten in mijn sessie zetten, ze wijzigen en/of verwijderen.
Hartstikke leuk allemaal, maar dit is het niet echt :(

Ik krijg namelijk in geen beding die id's, die nu leuk als key in de array staan, door middel van een query op de database om naar bijvoorbeeld namen. Ik moet uit de dbase de naam, prijs, etc halen. Maar ik zit weet vast.

Via array_keys($_SESSION["cart"]) weet ik dat ik alle keys die ik heb, mijn ID's, in een array kan zetten.
Via count(array_keys($_SESSION["cart"])) kan ik de hoeveelheid verschillende produkten tellen.

Ik heb dus in die eerste array al mijn id's zitten, maar ik heb geen idee hoe ik deze omzet naar echte data.
Iemand een idee??

Acties:
  • 0 Henk 'm!

  • Dennahz
  • Registratie: November 2001
  • Laatst online: 17-09 21:50

Dennahz

Life feels like hell should.

Twitter


Acties:
  • 0 Henk 'm!

Verwijderd

Als je het eerste item wilt hebben kun je toch gewoon dit doen:

PHP:
1
2
$sleutels = array_keys($_SESSION['cart']);
$eersteitem = $_SESSION['cart'][$sleutels[0]];


Of als je het item wilt hebben met ID 5 kun je gewoon dit doen:

PHP:
1
$itemmetid5 = $_SESSION['cart'][5]

Acties:
  • 0 Henk 'm!

Verwijderd

Zoals Dennahz al zei, je kan foreach gebruiken om van elke value in een array zowel de key als de value er uit te halen. Je syntax komt dan in de buurt van dit:

PHP:
1
2
3
4
5
6
<?php
foreach($winkelwagentje as $id => $aantal)
{
    // Query etc.
}
?>


De syntax is in het begin een beetje verwarrend, maar het zal zo wel werken. Als je nu de naam van dat product wil weten kan je gewoon een query in de richting van dit doen:

PHP:
1
2
3
4
<?php
$productdetails_query = mysql_query("SELECT naam, prijs FROM table WHERE id = " . $id);
$productdetails = mysql_fetch_assoc($productdetails);
?>


En voila, een array met al je productinfo.

Jelco

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is gelukt :-)
Sorry voor het late reageren, ik was er namelijk al een tijdje mee bezig en toen ik het opgelost had en het werkte, heb ik even rust genomen :-)
Ben nu bezig met het aanpassen van de aantallen, maar dit wil niet echt vlotten.
\[PHP/AJAX/JS] Formulier in winkelwagen, prijzen wijzigen
Misschien dat jullie me daar ook in kunnen helpen :)

bedankt voor de hulp en ik hoop dat anderen met hetzelfde probleem ook eventueel verder komen met jullie hulp in dit topic
Pagina: 1