| 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: 14 let
|
|||
0