Haal getal af van value wanneer specifieke key in twee arrays gelijk is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

14/06/2019 09:30:15
Quote Anchor link
Ik heb twee arrays voor een webshop, de ene array bevat order informatie en de andere array bevat de maten van het product en hoeveel er van elk product zijn. Voorbeeld:

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
Array
(
    [productId] => 3
    [productname] => Test product 2
    [quantity] => 2
    [price] => 4500
    [extra] => M
    [description] => Kleding
    [vatCode] => H
)


Array
(
    [maten0] => Array
        (
            [One-Size] =>
            [XS] =>
            [S] =>
            [M] => 20
            [L] =>
            [XL] =>
            [XXL] =>
        )

)


De maten0 array heb ik nu voor het gemak even omgevormd naar een array maar in mijn database staat het opgeslagen als json object. Ik wil graag dat bij onderstaande array 2 van [M] wordt afgehaald omdat in de bovenste array staat dat er bij de bestelling een quantity van 2 is gekocht met maat M (key 'extra').

Via de volgende code krijg ik bovenstaande arrays:

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
<?PHP
foreach($prodinfojson as $prodinfo){
  if(!empty($prodinfo['extra'])){
    $extra = ' - '.$prodinfo['extra'];
  }


  //Get stock and sizes
  $getstock = 'SELECT * FROM snm_fields_values WHERE item_id = "'.$conn->real_escape_string($prodinfo['productId']).'" AND field_id = 8';
  $getstockcon = $conn->query($getstock);
  $getstock = $getstockcon->fetch_assoc();

  $getstock = json_decode($getstock['value'], true);

  echo '<pre>';
  print_r($prodinfo);
  echo '</pre>';


  echo '<pre>';
  print_r($getstock);
  echo '</pre>';
  
}

?>


Ik moet dus het json object omzetten naar een php array wat ik nu al doe, daar de stock updaten door het aantal dat is besteld bij de juiste maat eraf te halen, dan de array terugzetten naar een json object en die updaten in mijn database. Dit is hoe het is opgeslagen in mijn database: {"maten0":{"One-Size":"","XS":"","S":"","M":"20","L":"","XL":"","XXL":""}}

Het meeste hiervan lukt me wel alleen heb ik wat problemen met het aftrekken van de maat. Hoe kan ik dat op de juiste manier doen? In de array mag de stock ook niet beneden de 0 gaan.
Gewijzigd op 14/06/2019 09:30:37 door Snelle Jaap
 
PHP hulp

PHP hulp

19/04/2024 18:09:38
 
Rob Doemaarwat

Rob Doemaarwat

14/06/2019 09:58:38
Quote Anchor link
Je kunt je ding doen op de $getstock, en dan met json_encode() de boel weer terugschrijven in de database. Maar weet je zeker dat je dit zo op wilt slaan in een database!? Als je de beschikbare maten/aantallen gewoon in een losse tabel plaatst is de boel een stuk overzichtelijker en kun je gewoon in de database rekenen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
update tabel_maten set aantal = aantal - 2 where item_id = 5 and maat = 'M'

Als er nu twee bestellingen tegelijk lopen kan het zijn dat de ene de wijziging van de ander overschrijf, en klopt je voorraad niet meer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
klant1 haalt JSON data op (aantal = 20)
                                        klant2 haalt JSON data op (aantal = 20)
klant1 past aantal aan (aantal = 18)
                                        klant2 past aantal aan (aantal = 19)
klant1 slaat op (aantal = 18)
                                        klant2 slaat op (aantal = 19)

3 stuks verkocht, slechts 1-tje uit de voorraad verdwenen ...
 
Snelle Jaap

Snelle Jaap

14/06/2019 10:07:23
Quote Anchor link
Klopt inderdaad, daar zal ik iets op moeten verzinnen.

Een losse tabel is misschien beter maar ik zit een beetje vast aan hoe het CMS waarmee ik werk de data opsla. Het lijkt me het beste om niet te sleutelen aan de basis van dat CMS.
Gewijzigd op 14/06/2019 10:08:11 door Snelle Jaap
 
Thomas van den Heuvel

Thomas van den Heuvel

14/06/2019 17:24:18
Quote Anchor link
En daarvoor heb je database-transacties :p.

EDIT: en wat @Rob aanhaalt, het lijkt mij ook beter om je database niet zodanig in te richten dat hier nog versleutelde informatie in zit die je nog uit moet pakken om dingen uit te kunnen rekenen, dat is (in dit geval) niet handig.

Ook zou je onderscheid kunnen maken tussen een bepaald product"type" (Hawaii t-shirt) en de uitvoeringen daarvan (maat M, X, XL, XXL, kleur rood, groen, blauw et cetera). Dit laatstgenoemde ding zijn in wezen je fysieke producten (unieke productconfiguraties), en daarvan zou je een voorraad bij moeten houden.
Gewijzigd op 14/06/2019 19:27:19 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.