Frage von EierBrei, 84

Wie kann ich in php einer Variable 2 Werte zuordnen und berechnen lassen?

Hallo zusammen,

Ich will eine Liste mit verschiedenen Namen ins Script einbinden. Jedem Name sind 2 versch. Zahlen zugeordnet. (Frage 1: Wie mache ich das?) Dann sollen diese Werte -einzeln- mit einer Anzahl multipliziert werden. (Frage 2: Wie mache ich das?)

Name und Anzahl werden vorher in ein Formular eingetragen, das habe ich (glaube ich) inzwischen hinbekommen.

Mein Hauptproblem ist also, dass ich nicht weiß, wie ich einer Variable 2 Zahlen zuordnen kann und beide einzeln mit der in ein Formular eingegebenen Anzahl multipliziert werden sollen. Es wird übrigens auch mehrere Namen geben.

Vielen Dank schon mal!

Antwort
von coding24, 44

Generell kannst du eine Variable NIEMALS mehr als einen Wert zuordnen.

Was hier bereits geschrieben wurde: versuch es mit einem 2D-Array. Das sollte dein Problem mit den zwei Werten, welche zu einem Namen gehören, lösen.

Dann brauchst du nur noch über das Feld iterieren und bist fertig.

Das sähe in PHP dann so aus:

<?php

$anzahl = 5;

$feld = [
'name1' => [1, 2],
'name2' => [3, 4],
];

foreach($feld as $name => $item) {
foreach($item as $key => $value) {
$feld[$name][$key] = $value * $anzahl;
}
}

print_r($feld);

Kann man auch (wenn man will) mit Referenzen machen - finde ich hier persönlich nicht so übersichtlich. Reicht für das Beispiel aber auch so aus.

Vielleicht einfach mal in eine PHP-Datei schreiben und das File ausführen. Das Ergebnis solltest du sehen und (hoffentlich) nachvollziehen können.

Kommentar von EierBrei ,

Dankeschön! Nun habe ich wieder ein Problem ^^: Aus irgendeinem Grund verstehe ich nicht, wie das Script jetzt rausfindet, welche 2 Werte zu dem, in das Formular eingegebenem Namen passen.

Kommentar von coding24 ,

Vielleicht solltest du einfach einmal zeigen, was du bisher überhaupt gemacht hast.

Dann kann man dir da auch besser helfen ;)

Kommentar von EierBrei ,

http://cloud.directupload.net/4SzD - ich hoffe, es ist nicht zu unübersichtlich/unverständlich ;D

Kommentar von coding24 ,

Schubs das doch lieber auf pastebin ;)

Kommentar von EierBrei ,

versteh ich nicht ^^, klappt irgendwie nicht... wird hier im Kommentar nur halb angezeigt...

Kommentar von EierBrei ,

http://www.directupload.net/file/d/4500/mo6q5lo5_png.htm - ich hoffe, so geht's auch ^^

Mit pastebin komm ich nicht klar, sry

Kommentar von coding24 ,

Die Werte musst du dem Script natürlich sagen ...

Pro Wert brauchst du dafür ein Input-Element - und in deinem PHP-Teil fügst du die Werte dann soweir zusammen, dass du das Array erhältst. Das heißt du brauchst für jeden Namen 2 Input-Felder: Wert1 und Wert2. Macht bei 4 Namen also 8 Felder. Die du dann entsprechend aus dem POST-Request (Superglobale $_POST) ausliest. Wie das geht weißt du ja bereits - das hast du in deinem Script auch schon gemacht.

Von daher verstehe ich nicht so ganz, wo du gerade hängst. Als Ziel (action) musst du dem Form noch das aktuelle Script geben.

$name["name1"]["zahl1"] weisst du also den $_POST-Value deines Feldes aus der Eingabemaske zu, die du gebaut hast. Wie das geht (wie erwähnt) weißt du doch schon - woran auch immer du dann jetzt noch hängst?

Antwort
von PeterKremsner, 46

Assoziatives Array:

$array["name"] = array(Zahl1, Zahl2);

Dann hast du unter jedem Namen im ersten Array ein Array mit 2 Zahlen.

Kommentar von EierBrei ,

Vielen Dank! Eine Frage habe ich dazu noch: Wie krieg ichs hin, dass das Script, den ins Formular eingegebenen Namen mit der Namensliste im Script vergleicht und dann die eingegebene Anzahl mit den, zum Namen gehörenden Zahlen, einzeln, multipliziert?

Hab inzwischen alles mögliche probiert...Kriegs einfach nicht hin ^^

Kommentar von PeterKremsner ,

Wenn du die Namensliste so wie ich geschrieben habe, als Assoziatives Array hast dann brauchst du nur:

$key = array_search($name,$array);
if($key !== false)
{
$Zahlen = $array[$key];
$Zahl1 = $eingegebeneZahl * $Zahlen[0];
$Zahl2 = $eingegebeneZahl * $Zahlen[1];
//Etwas sinnvolles mit den Zahlen machen
}
else
//Der Eingegeben Name existiert nicht.

$array ist eben das Assoziative Array wie oben dargestellt.

$name ist der ins Formular eingegebene Name

$eingegebeneZahl ist die ins Formular eingegebene Zahl

$Zahl1 ist die erste zum Namen gehörende Zahl multipliziert mit der eingegebene Zahl.

$Zahl2 ist die zweite zum Namen....

Die Variablen Namen musst du natürlich an die in deinem Skript anpassen.

Kommentar von EierBrei ,

Danke! Wofür steht $key?

Kommentar von PeterKremsner ,

Ich hab einen Fehler im Skript, das währe für ein Numerisches Array voller Namen.

if(isset($array[$name]))
{
   $Zahlen = $array[$name];
   $Zahl1 = $eingegebeneZahl * $Zahlen[0];
   $Zahl2 = $eingegebeneZahl * $Zahlen[1];
}
else
   //Der Name ist nicht in der Liste

Das sollte für die Version mit dem Assoziativen Array passen.

Die Abfrage mit isset ist notwendig weil ein Derefenzieren des Array mit einem nicht vorhandenen Schlüssel eine Warnung erzeugen würde.

Kommentar von EierBrei ,

Ok, danke! Hat geklappt und ich habs verstanden! Wie kann ich es jetzt erreichen, dass man auch Umlaute eingeben kann, die dann auch verstanden werden?

Kommentar von EierBrei ,

(hat sich geklärt)

Kommentar von EierBrei ,

Was muss ich machen, wenn es mehrere Eingabefelder für Namen gibt, aber nicht alle ausgefüllt sein müssen? Wenn ich einfach das if(isset...) weglasse, wird zwar gerechnet, aber es kommt auch die Notiz, dass die Namen im assoziativen Array nicht definiert seien. Wie krieg ich die Meldung weg? (Die Namen sind ja definiert, nur wird nicht geprüft, ob etwas in die input-Felder eingegeben wurde))

Kommentar von PeterKremsner ,

Das if(isset ...) muss drinnen bleiben sonst ist es klar dass du diese Meldung erhältst....

Du musst das mit den Inputfeldern vorher handhaben und die den Teil den ich gepostet habe nur für die ausgefüllten Felder auswerten.

if(isset($_POST["name des eingabefeldes"]))
{
  //Funktion von oben Auswerten
}

Damit prüfst du ob in das Feld etwas eingetragen wurde und wenn ja dann führst du die Suche im Assoziativen Array durch.

Kommentar von EierBrei ,

hm, habe das jetzt so gemacht und die Meldung kommt immer noch ^^
Also ich habe if(isset($_POST["name1"])), danach das von oben. Das ganze habe ich für jeden Namen einzeln gemacht, habe auch schon die Syntax geprüft, da dürfte mir kein Fehler unterlaufen sein, habe auch hauptsächlich kopiert und eingefügt, die Variablen sind auch alle angepasst...
Muss ich die if(isset...)'s alle nacheinander schreiben? Was mache ich falsch?

Vielen Dank schon mal! Komme grad kein Stück weiter.

Kommentar von EierBrei ,

Gibt es vllt. irgendeine Möglichkeit, dem Script zu sagen, dass es die Eingabefelder, in die nichts eingetragen wurde ignorieren soll und nur mit den anderen rechnen soll? Das würde das "Problem" ja dann lösen, oder?

Kommentar von PeterKremsner ,

Naja die Möglichkeit besteht ja im verwenden von isset.

Es kann sein, dass du für die Werte in der Eingabe eine Abfrage auf !empty machen musst, dann werden da auch zB keine leeren Strings durchgelassen.

Der Fehler mit dem Arrayzugriff sollte bei der Richtigen Verwendung von isset nicht passieren, poste den Code mal auf pastebin oder einer anderen Seite mit Synthax Highlighting.

Btw den selben Block Code musst du nicht immer kopieren, mach einfach eine Funktion draus.

Antwort
von tDoni, 51

Schau dir mal die Arrays an. Die kannst du auch verschachteln.

http://php.net/manual/de/language.types.array.php

Antwort
von DodgeRT, 37

ich hab keine ahnung was du machen willst - aber ggf. hilft dir n array weiter?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten