login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem met array vergelijken en waarden verwijderen

Offline Ronman - 03/08/2012 20:45
Avatar van RonmanLid Hoi Forum,
Als beginnende php'er zou ik u een vraag willen stellen.
Ik heb meerdere oplossingen van internet geprobeert maar geen resultaat.
Vraag:
Ik heb 2 arrays op deze manier gemaakt
$ar1 = array(help1, $product);
$ar2 = array(help2, $aantal);
array_multisort($ar1, $ar2);

U ziet dat de waarde broodje gezond[4] en de waarde 0[4] dezelfde key hebben.
nu wil ik graag de waarde broodje gezond[4] uit help1 verwijderen en 0[4] uit help2 verwijderen. (help1 en help2 heb ik voor de duidelijkheid gemaakt maar spelen geen rol in deze arrays)
Waar moet ik beginnen?

Array ( [0] => help1 [1] => Array ( [0] => Aardbeientaartje [1] => Appeltaartje [2] => Pistolet gehaktbal [3] => Pistolet gezond [4] => Broodje gezond [5] => Kroket ) )
Array ( [0] => help2 [1] => Array ( [0] => 4 [1] => 0 [2] => 2 [3] => 2 [4] => 0 [5] => 5 ) )

10 antwoorden

Gesponsorde links
Offline ibmos2warp - 03/08/2012 21:21 (laatste wijziging 03/08/2012 21:21)
Avatar van ibmos2warp PHP interesse Zie multidimensionele array's: PHP.net: language.types.array.
Let ook op, $array = array(help1); is niet correct. Een string (PHP.net: language.types.string) hoort tussen quotes (' of ") te staan, dus:
$array = array("help1");
Bedankt door: Ronman
Offline Ronman - 03/08/2012 22:20
Avatar van Ronman Lid Ik heb gekeken op deze pagina en ik begrijp dat ik met unset($ar[2]); de value met key 2 verwijder.
Het volgende is echter de bedoeling.
Ik heb een product in $ar1 met de key[?] overeenkomend met de key[?] van $ar2 waarvan de waarde 0 is.
Er worden dus 0 producten besteld.
Het is dus niet nodig deze in de lijst te laten staan
.
Ik wil daarom het volgende: verwijder waarde uit $ar1 en $ar2 waar value $ar2 0 is .
en daar snap ik nog steeds niets van, waarschijnlijk zal het iets met foreach worden maar hoe??
Offline ibmos2warp - 03/08/2012 22:48
Avatar van ibmos2warp PHP interesse Begrijp je wat multidimensionele arrays zijn?
Offline Ronman - 04/08/2012 15:59
Avatar van Ronman Lid Ik dacht dat je met multidimensionale arrays van meerdere arrays 1 array kon maken waarna filteren van de gegevens makkelijker zou gaan.

Ik heb echter ook gevonden:
$array1 = array($product);
$array2 = array($aantal );
$result = array_merge($array1, $array2);
print_r($result);

array_merge dus.

Hiermee heb ik 1 array gemaakt maar het filteren zoals bedoelt in bovenstaande (dik gedrukte vraag) lukt nog niet.
Arrays zijn volledig nieuw voor mij en ik hoop dan ook op een kleine aanwijzing.
Offline lolll - 04/08/2012 16:26
Avatar van lolll Lid Je hoeft helemaal die arrays niet te samen te brengen als ik je goed begrijp.
Door gewoon array2 te doorlopen en op zoek te gaan naar 0, kan je ook al de onnodige waarden uit de beide arrays halen:

  1. for($i=0;$array2[$i];$i++){ //Ieder element in de array doorlopen
  2. if($array2[$i]==0){ //Controleren of de waarde van het huidige element 0 is
  3. unset($array1[$i], $array2[$i]); //Zoja, het element uit array1 en array2 verwijderen
  4. }
  5. }


Lolll
Offline ibmos2warp - 04/08/2012 16:52
Avatar van ibmos2warp PHP interesse
lolll schreef:
Je hoeft helemaal die arrays niet te samen te brengen als ik je goed begrijp.
Door gewoon array2 te doorlopen en op zoek te gaan naar 0, kan je ook al de onnodige waarden uit de beide arrays halen:

[..code..]

Lolll

Dit is een soort winkelwagen systeem (althans zo ziet het eruit). Je wilt dan natuurlijk dat de data goed blijft (de juiste aantal voor het juiste product). Door twee LOSSE array's te gebruiken maak je voor jezelf een groot risico, de data die je 'opslaat' is gescheiden van elkaar, terwijl het bij elkaar hoort. Daarom is het verstandiger om een multidimensionele array te gebruiken, dan kan je ook zorgen dat beide elementen dezelfde key hebben, wat de topic starter wilt.
Offline Ronman - 04/08/2012 18:56
Avatar van Ronman Lid Dit is inderdaad een soort winkelwagen.
Natuurlijk kan ik op internet een kant en klare winkelwagen script downloaden (zelfs complete winkels)
Maar om php beter te leren begrijpen probeer ik voor mijzelf het wiel opnieuw uit te vinden.
Van de fouten leer je immers het meest.
Alleen heb ik voor bovenstaand probleem de hulp nodig van mensen die verstand an zaken hebben.
Vandaar dit topic.
NB
Het script van loll werkt niet.(unset werkt niet)
Het kan natuurlijk goed zijn dat ik een fout maak.
Ronman
Offline lolll - 04/08/2012 19:54
Avatar van lolll Lid
Ronman schreef:
Ik heb een product in $ar1 met de key[?] overeenkomend met de key[?] van $ar2


Dus zit de data toch automatisch goed? En kan deze verbonden worden met een key.

Probeer anders eens zo:
  1. foreach ($array2 as $i => $value) { //Ieder element in de array doorlopen
  2. if($array2[$i]==0){ //Controleren of de waarde van het huidige element 0 is
  3. unset($array1[$i], $array2[$i]); //Zoja, het element uit array1 en array2 verwijderen
  4. }
  5. }


Lolll
Offline ibmos2warp - 04/08/2012 20:26 (laatste wijziging 04/08/2012 20:26)
Avatar van ibmos2warp PHP interesse
Ronman schreef:
Dit is inderdaad een soort winkelwagen.

Mooi.
Ronman schreef:
Natuurlijk kan ik op internet een kant en klare winkelwagen script downloaden (zelfs complete winkels)

Dat weet ik, ik heb het daar niet over....
Ronman schreef:
Maar om php beter te leren begrijpen probeer ik voor mijzelf het wiel opnieuw uit te vinden.

Dat is erg slim om te doen ja.
Ronman schreef:
Van de fouten leer je immers het meest.

Ja klopt.
Ronman schreef:
Alleen heb ik voor bovenstaand probleem de hulp nodig van mensen die verstand an zaken hebben.

Je moet ook php.net lezen, ik heb je een link gegeven naar een php.net pagina waarop arrays en ook multidimensionele arrays uitgelegd staan. Hoe je aan die array_merge bent gekomen weet ik niet, maar het staat dus niet op die pagina. Ook snap je blijkbaar dus niet wat multidimensionele arrays zijn.
Ronman schreef:
Vandaar dit topic.

Lees veel op php.net.
Ronman schreef:
NB
Het script van loll werkt niet.(unset werkt niet)
Het kan natuurlijk goed zijn dat ik een fout maak.
Ronman

Nee, dat is niet de weg die je wilt nemen, het is niet goed om het op die manier te doen. Hier is een voorbeeldscript:
  1. <?php $producten = array(); // Je winkelwagen
  2.  
  3. var_dump('lege winkelwagen', $producten, PHP_EOL);
  4.  
  5. // Een klant wilt een product kopen, stel twee broden:
  6.  
  7. $producten[] = array('brood', 2);
  8.  
  9. var_dump('Een product in het winkelwagentje', $producten);
  10.  
  11. // Haal het product uit het winkelwagentje:
  12.  
  13. unset($producten[0]);
  14.  
  15. var_dump('product verwijderd', $producten);
  16.  
  17. // Een andere manier:
  18.  
  19. $producten[] = array('id' => 193, 'naam' => 'Brood', 'soort' => 'bruin', 'aantal' => 2);
  20.  
  21. var_dump('dit zit in de winkelwagen', $producten);
  22.  
  23. // Nog een andere manier:
  24.  
  25. $producten[193] = array('naam' => 'brood', 'soort' => 'bruin', 'aantal' => 2);
  26.  
  27. var_dump('nu zit het er op een andere manier in het winkelwagentje:', $producten); ?>
  28.  
  29. /* Dit script levert dit:
  30. string 'lege winkelwagen' (length=16)
  31. array
  32. empty
  33. string '
  34.  
  35. ' (length=2)
  36. string 'Een product in het winkelwagentje' (length=33)
  37. array
  38. 0 =>
  39. array
  40. 0 => string 'brood' (length=5)
  41. 1 => int 2
  42. string 'product verwijderd' (length=18)
  43. array
  44. empty
  45. string 'dit zit in de winkelwagen' (length=25)
  46. array
  47. 1 =>
  48. array
  49. 'id' => int 193
  50. 'naam' => string 'Brood' (length=5)
  51. 'soort' => string 'bruin' (length=5)
  52. 'aantal' => int 2
  53. string 'nu zit het er op een andere manier in het winkelwagentje:' (length=57)
  54. array
  55. 1 =>
  56. array
  57. 'id' => int 193
  58. 'naam' => string 'Brood' (length=5)
  59. 'soort' => string 'bruin' (length=5)
  60. 'aantal' => int 2
  61. 193 =>
  62. array
  63. 'naam' => string 'brood' (length=5)
  64. 'soort' => string 'bruin' (length=5)
  65. 'aantal' => int 2
  66. */
Offline Ronman - 11/08/2012 00:22 (laatste wijziging 11/08/2012 00:57)
Avatar van Ronman Lid Het heeft even geduurd maar ik heb de oplossing.

if(isset($_POST['versturen'])) // controle Form verzonden
{

$producten = array();

$producten = array('product' => $product, 'aantal' => $aantal, 'prijs' => $prijs);

echo '<pre>'.print_r($producten, true).'</pre>'; // ter controle

foreach($producten as $value => $item){
echo $value."<br>";

foreach($item as $i => $val){
if ($aantal[$i] >= 1){
//unset($item[$i]); // unset verhaal hoeft er niet in
echo $val."<br>";
}

}

}
} // einde isset

Met dank aan beiden.
Ronman
NB
wil je deze code checken ga dan naar de volgende url:
http://www.de-groenegids.nl/test/bestelform1.php
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.219s