Autor | Zpráva | ||
---|---|---|---|
Pavel Straka Profil |
#1 · Zasláno: 11. 3. 2012, 20:27:39
Dobrý večer, rád bych požádal o radu. Potřebuji napsat skript, který mi na základě uživatelovy volby vlastností produktu ve 3 políčkách select vypíše všechny produkty, které splňují tuto uživatelem zadanou kombinaci.
Př. Uživatel zadá, že produkt má parametr A:2, parametr B:3 a parametr C:1. A nyní mám řekněme 40 produktů a potřebuji nějak elegantně (nutno bez použití DB) vypsat ty, které splňují tyto podmínky. Je to možné vyřešit pomocí pole? Děkuji za rady. |
||
Majkl578 Profil |
#2 · Zasláno: 11. 3. 2012, 20:41:09
To by problém být neměl, pomineme-li, že takový kód se hůře udržuje. Stačí si vytvořit pole produktů (ideálně každý produkt bude objektem) a toto pole budeme filtrovat. K filtrování bude asi nejsnazší použít array_filter. V callbacku předávanému této funkci pak provedeme samotné filtrování dle daných kritérií a vrátíme
TRUE /FALSE pokud produkt podmínkám odpovídá nebo ne.
|
||
Pavel Straka Profil |
#3 · Zasláno: 11. 3. 2012, 23:53:58 · Upravil/a: Pavel Straka
Přiznám se, že jsem z toho trochu zmatený. Přečetl jsem si o funkci array_filter a chápu, jak funguje. Nevím, ale jak to celé aplikovat na to, že vybírám ze 3 selectů. Mohl byste mi prosím ještě někdo poradit?
Dejme tomu, že mám 3 položky: ("Název", "Šířka", "Výška", "Hloubka") "A","60","50","40" "B","40","50,"30", "C","40","50","30" a uživatel ve 3 selectech zadá 40,50,30, tudíž by se mu měly vypsat produkty B a C. Jak pro to připravit pole a jak jej pak filtrovat? Předokládám správně, že vytvořím dvojrozměrné pole nějak takto: $pole = Array( Array("nazev"=>"A","sirka"=>"60","vyska"=>"50","hloubka"=>40); Array("nazev"=>"A","sirka"=>"40","vyska"=>"50","hloubka"=>30); Array("nazev"=>"A","sirka"=>"40","vyska"=>"50","hloubka"=>30); ); Jestliže ano, jak pak bude vypadat filtr? |
||
Keeehi Profil |
$uzivateluv_vstup_a = $_GET["a"]; // 40 $uzivateluv_vstup_b = $_GET["b"]; // 50 $uzivateluv_vstup_c = $_GET["c"]; // 30 $produkty = array ( array ("A","60","50","40"), array ("B","40","50","30"), array ("C","40","50","30") ); foreach ($produkty as $produkt) { if ($produkt[1] == $uzivateluv_vstup_a && ($produkt[2] == $uzivateluv_vstup_b && ($produkt[3] == $uzivateluv_vstup_c) { echo $produkt[0]."<br>\n"; } } |
||
Pavel Straka Profil |
#5 · Zasláno: 12. 3. 2012, 01:25:40
Děkuju mnohokrát.
|
||
Majkl578 Profil |
#6 · Zasláno: 12. 3. 2012, 01:56:59
Pavel Straka:
„jak pak bude vypadat filtr“ Bylo to myšleno takto: $pole = array( array('nazev' => 'A', 'sirka' =>60, 'vyska' =>50, 'hloubka' => 40), array('nazev' => 'A', 'sirka' =>40, 'vyska' =>50, 'hloubka' => 30), array('nazev' => 'A', 'sirka' =>40, 'vyska' =>50, 'hloubka' => 30), ); $selectedNazev = 'A'; $selectedSirka = 60; $selectedVyska = 50; $filtered = array_filter($pole, function ($item) use ($selectedNazev, $selectedSirka, $selectedVyska) { return $item['nazev'] === $selectedNazev && $item['sirka'] === 60 && $item['vyska'] === $selectedVyska; }); var_dump($filtered); |
||
Časová prodleva: 11 let
|
0