array verständnis frage
Kai
- php
Hallo libe Leuts im Forum,
ich versuche eine Kalkulation für einen Digitaldruck die mir in einer Excel Tabelle vorliegt in PHP umzusetzen und scheiter an den Arrays.
Hier mal der Code:
<php
$Auflage = 1;
$Druck = "4/4";
$Format = "A4";
$Papier = "100";
if ($Auflage <= 10)
{
$array = array("format"=>"A4", "papier"=>"80", "druck"=>"1/0", "preis"=>0.11);
$array = array("format"=>"A4", "papier"=>"80", "druck"=>"1/1", "preis"=>0.23);
$array = array("format"=>"A3", "papier"=>"80", "druck"=>"1/0", "preis"=>0.23);
$array = array("format"=>"A3", "papier"=>"80", "druck"=>"1/1", "preis"=>0.45);
$array = array("format"=>"A4", "papier"=>"100", "druck"=>"4/0","preis"=>0.75);
$array = array("format"=>"A4", "papier"=>"100", "druck"=>"4/4","preis"=>1.48);
$array = array("format"=>"A3", "papier"=>"100", "druck"=>"4/0","preis"=>1.48);
$array = array("format"=>"A3", "papier"=>"100", "druck"=>"4/4","preis"=>2.85);
$array = array("format"=>"A4", "papier"=>"120", "druck"=>"4/0","preis"=>0.74);
$array = array("format"=>"A4", "papier"=>"120", "druck"=>"4/4","preis"=>1.44);
$array = array("format"=>"A3", "papier"=>"120", "druck"=>"4/0","preis"=>1.48);
$array = array("format"=>"A3", "papier"=>"120", "druck"=>"4/4","preis"=>2.88);
for ($i=0; $i<12; $i++)
{
if ( ($array[format] = "$Format") && ($array[druck] = "$Druck") && ($array[papier] = "$Papier") )
{
$preis = $array[preis] * $Auflage;
}
}
echo $preis;
}
?>
Jetzt mein Problem, ich lande immer im letzten Array also bei 2.88, ich denke das liegt daran das ich das $array immer neu überschreibe, aber wie kann ich denn alle $arrays durchlaufen und mit meiner if-Abfrage vergleichen?
Noch eine kleine Frage, man vergleicht doch mit == aber wenn ich das in meine if-Abfrage schreibe springt er dort gar nicht rein - nur wenn ich es mit = mache, vergleicht man array Elemente anderes?
Schonmal dank im voraus Kai
Hi,
Jetzt mein Problem, ich lande immer im letzten Array also bei 2.88, ich denke das liegt daran das ich das $array immer neu überschreibe,
richtig.
aber wie kann ich denn alle $arrays durchlaufen und mit meiner if-Abfrage vergleichen?
Indem Du Deine Arrays in ein Array speicherst, welches Du durchläufst.
Noch eine kleine Frage, man vergleicht doch mit == aber wenn ich das in meine if-Abfrage schreibe springt er dort gar nicht rein - nur wenn ich es mit = mache, vergleicht man array Elemente anderes?
Nein, mit "=" weist Du einen Wert zu. Wenn dieser im Boole'schen Sinne wahr ist, ist die Zuweisung wahr. Der vorherige Wert ist damit aber eliminiert.
Cheatah
Erstmal danke für deine Antwort...
Indem Du Deine Arrays in ein Array speicherst, welches Du durchläufst.
Ich glaube da habe setzt jetzt mein Verständnissproblem ein:
$array['$i] = array("format"=>"A4", "papier"=>"80", "druck"=>"1/0", "preis"=>0.11);
$array[$i] = array("format"=>"A4", "papier"=>"80", "druck"=>"1/1", "preis"=>0.23);
... wenn ich es so mache und die $arrays jetzt durchlaufe habe ich doch das selbe Problem das ich wieder beim letzt lande, weil ich das wieder überschreibe oder nicht?
Hi,
... wenn ich es so mache und die $arrays jetzt durchlaufe habe ich doch das selbe Problem das ich wieder beim letzt lande, weil ich das wieder überschreibe oder nicht?
Du überschreibst das $i-te. Füge dem Array einfach neue Werte hinzu. Einen Index brauchst Du bei PHP dabei nicht anzugeben.
Cheatah
Sorry, leider verstehe ich nicht ganz wie du es meins, so?
$array =array(array("format"=>"A4", "papier"=>"80", "druck"=>"1/0", "preis"=>0.11),
array("format"=>"A4", "papier"=>"80", "druck"=>"1/1", "preis"=>0.23));
...wenn ja, wie könnte ich denn so ein array durchlaufen und dementsprechend die if abfrage stellen array[0]['format'] würde ja nur das erste array - 'format' überprüfen es sollen ja aber alle arrays und deren elemente überprüft werden.
Hi,
Sorry, leider verstehe ich nicht ganz wie du es meins, so?
das ist ein Weg, wenn auch ein unschöner.
...wenn ja, wie könnte ich denn so ein array durchlaufen
Genauso wie jedes andere Array.
Cheatah
n'abend,
vielleicht möchtest du deine Arrays etwas sinnvoller anlegen. PHP ist es "egal", ob du einen nummerischen Index angibst:
$demo = array();
$demo[0] = "erster wert"; // hat Index 0
$demo[1] = "zweiter wert"; // hat Index 1
diesen ignorierst und PHP den Index automatisch setzt:
$demo = array();
$demo[] = "erster wert"; // hat Index 0
$demo[] = "zweiter wert"; // hat Index 1
oder du einen String als Index setzt
$demo = array();
$demo['erster'] = "erster wert"; // hat Index 'erster'
$demo['zweiter'] = "zweiter wert"; // hat Index 'zweiter'
Das letzte Beispiel ist in PHP weitestgehend als "assoziatives Array" bekannt.
Ein Beispiel für deine Daten:
$preisliste = array(
'A4' => array(
80 => array(
'1/0' => 0.11,
'1/1' => 0.23
),
100 => array(
'4/0' => 0.75,
'4/4' => 1.48
),
120 => array(
'4/0' => 0.75,
'4/4' => 1.48
)
),
'A3' => array(
80 => array(
'1/0' => 0.11,
'1/1' => 0.23
),
100 => array(
'4/0' => 0.75,
'4/4' => 1.48
),
120 => array(
'4/0' => 0.75,
'4/4' => 1.48
)
)
);
// zugriff per
$preisliste[$format][$dicke][$druck]
Mit dieser Struktur ersparst du dir das Durchlaufen deiner ganzen Preisliste.
weiterhin schönen abend...
Danke für deine Hilfe, so habe ich es verstanden und ich konnte es jetzt umsetzen. Gruß Kai.