PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vergleich und replace



ace23
06-01-2006, 16:25
Hallo Leute,

ich hab ein Problem ;)

ich habe ein Array, dies sollen die Namen zu den Zahlen sein:

$array1=array(
'1'=>'Birnen',
'2'=>'Orangen',
'3'=>'Tomaten'
);

Dann lese ich aus der Datenbank aus einem Feld, komma getrennte Werte, diese sind dann z.B. 1,2

Nun will ich das die Zahlen aus der DB mit denen im Array1 verlichen werden, diese dann ersetzt werden und mit den namen ausgegeben werden können.
Ich hab mich heute schon ewig darn versucht, aber ich scheiter immer wieder. Mir fehlt auch einfach der ansatz dazu, zumal es ja nicht nur ein Datensatz ist sonder verschiedene in der Abfrage und zu jeder Zahl muss dann der name der zu dieser zahl passt.

Romanday
08-01-2006, 12:47
Hallo Leute,

ich hab ein Problem ;)

ich habe ein Array, dies sollen die Namen zu den Zahlen sein:

$array1=array(
'1'=>'Birnen',
'2'=>'Orangen',
'3'=>'Tomaten'
);

Dann lese ich aus der Datenbank aus einem Feld, komma getrennte Werte, diese sind dann z.B. 1,2

Nun will ich das die Zahlen aus der DB mit denen im Array1 verlichen werden, diese dann ersetzt werden und mit den namen ausgegeben werden können.
Ich hab mich heute schon ewig darn versucht, aber ich scheiter immer wieder. Mir fehlt auch einfach der ansatz dazu, zumal es ja nicht nur ein Datensatz ist sonder verschiedene in der Abfrage und zu jeder Zahl muss dann der name der zu dieser zahl passt.


Das mußt du erst mal in Kleinen üben.

Mach 2 kleine Arrays. Gib einen Array mit einer Schleife aus.
Innerhalb der Schleife fragst du mit if/else ab, ob es dieses Element
in deinem anderen Array schon gibt. Erst mal damit rumspielen und
dann das erworbenen Wissen auf die DB Arrays übertragen.

undefined
08-01-2006, 13:04
Siehe in der PHP Manual explode()

michael.sprick
08-01-2006, 13:16
Meistens deuten Komma-getrennte Werte in einer DB auf einen Fehler im DB Design hin ;) Evtl. bietet sich an, eine zusätzliche Relation zu schaffen, mit der Du das direkt auflösen kannst... z. B.



------------------- n ----------------
| Fruechte | ----------<>---------| Kunden |
------------------- m ----------------


in PHP kannst Du das z.B. mit explode lösen, wie undefined bereits sagte:



$array = array(
1 => 'Birne',
2 => 'Apfel',
3 => 'Pflaume',
4 => 'Kirsche',
5 => 'Kumquat',
6 => 'Himbeere',
7 => 'Erdbeere'
);

while($Row = mysql_fetch_assoc($result))
{
$FruchtIDs = explode(",", $Row['spaltenname']);
$Fruechte = array();

foreach ($FruchtIDs as $ID)
{
array_push($Fruechte, $array[$ID]);
}

$Liste = implode(", ",$Fruechte);
echo $Liste;

}

Romanday
08-01-2006, 15:04
in PHP kannst Du das z.B. mit explode lösen, wie undefined bereits sagte:



Wenn wir ihm alles vorbeten, nehmen wir ihm die Chance zu lernen,
und landen wieder bei ... Stell eine Frage ... Code komm raus Forum.:D

undefined
08-01-2006, 16:47
Wenn wir ihm alles vorbeten, nehmen wir ihm die Chance zu lernen,
und landen wieder bei ... Stell eine Frage ... Code komm raus Forum.:D
Oder anders geschrieben RTFM :D

ace23
09-01-2006, 22:44
Hallo,

vielen Dank erstmal, ich denke ich habs 50% verstanden, hab es eigentlich auch schon fast soweit gehabe, nur das array_pusch hatte ich nicht drin.
Werde mir das aber nochmal genauer anschauen wie sich das zusammensetzt.

Sorry das ich erst jetzt antworte, war auf Montage ;(

Romanday
10-01-2006, 08:34
Sorry das ich erst jetzt antworte, war auf Montage ;(

Programmierer sind immer auf Montage.:D

ace23
10-01-2006, 16:46
lol
Ja das kann ich dann in einem Jahr vielleicht sagen wenn ich mein c++ Studium abgeschlossen habe. Dann gehts richtig los, aber solange muss ich noch buckeln.

ace23
10-01-2006, 19:21
Achja ich hab da noch eine Frage zu dem Code.

Also wie ich ja sicher richtig deute wird mit array_push das ganze an das ende eines arrays geladen und mit implode in einem string wiedergegeben.

Ich hab mir jetzt Gedanken gemacht wie ich die implode stelle über eval ausgeben kann, da das woran ich arbeite mit templates arbeitet die durch eval ausgegeben werden. Nur wie kann ich das machen? Gehen würde das so sicher auch, aber dann hab ich ja immer das trennzeichen im PHP-Code.

Es müsste dann so sein, das in der Variable $Liste immer nur der Wert steht und dann durch eval ausgegeben werden kann. Hab schon bischen versucht, aber das haut ned hin. Woran kann ich mich halten oder orientieren?

ace23
15-01-2006, 12:08
So muss das nochmal hoch schieben, habs immer noch ned gepackt.

Wäre echt dankbar wenn ich noch nen Tipp bekomen könnte.

Das Problem ist noch das von meinem letzten Post, ich möchte gerne die Namen und ids dazu in einem selectmenü haben, wo man dann auch mehrere markieren kann ect. Unverständlich dabei ist eigentlich nur wie ich ohne implode das array auslesen kann und mit eval ausgeben kann, so wie bei einer datenbankabfrage in einer while schleife, wo ich dann nacheinander die einträge ausgeben kann.

Hoffe ich hab das soweit verstädlich erklärt ;)

michael.sprick
16-01-2006, 08:45
Wenn wir ihm alles vorbeten, nehmen wir ihm die Chance zu lernen,
und landen wieder bei ... Stell eine Frage ... Code komm raus Forum.:D
Ja, vermutlich hast Du Recht. Andererseits hat man dann immer diese Postings, die ständig ge-*hochschieb*-t werden ;) :D

...aber ich versuchs mal ;)

@ace: Schau dir mal die foreach() Schleife und das implode() genau an und überleg´, was dort passiert...
Danach überleg´ mal, ob nicht auch der .= Operator was für Dich tun könnte ;)

@Romanday: besser? ;)

Romanday
16-01-2006, 11:21
@Romanday: besser? ;)

(Soll ja keine Anmache sein, sondern nur ein Vorschlag.:D
Copy und Paste können Sie alle. Außerdem wenn User XY
sich auf die Reise macht ein kleines Script zu schreiben,
entdeckt er noch ganz andere Möglichkeiten die er bestimmt
für weitere Scripte gebrauchen kann.

Langfristig gesehen müssen wir ihm weniger helfen, da er
seine eigenen Erfolgserlebnisse hat. (Die wir ihm sonst nehmen
würden.))

Zum Thema:
Ich würde eval() nur in Ausnahmefällen benutzen.
Du kannst mit file() bequem eine Datei einlesen, + z. B.
mit str_replace() oder preg.*() Funktionen dein
Trennzeichen löschen, oder ändern.
Prüfungen mit isset() && || empty() nicht vergessen!

Wenn du auf vorgefertigte Template Engines zurückgreifen möchtest,
ist wohl Smarty eines der bekanntesten Vertreter.

ace23
16-01-2006, 17:06
Gut ich werd mir das nochmal genauer anschauen, verlange ja keine komplettlösung ;)

@Romanday

Da ich eine Erweiterung für ein Portalsystem baue, greife ich auf Eval zurück, eben wegen des Templatesystems.