mit unset() Array Element löschen
HeikoH
- php
Hallo an Alle,
ich versuche mit unset() Array Element zu löschen, aber wie bei
http://de.php.net/manual/de/function.unset.php angegeben funktioniert es nicht, den Wert zu löschen.
Mein Beispielcode:
<html>
<head>
<?php
session_start();
//Vergleichsliste bearbeiten
if (isset($vergleich)) {
if (isset($vergleichprodukt)) {
array_push($vergleichprodukt,$vergleich);
}
else {
$vergleichprodukt = array($vergleich);
session_register("vergleichprodukt");
}
}
if (isset($del_vergleich)) {
unset($vergleichprodukt['$del_vergleich']);
}
?>
</head>
<body>
<?php if (isset($vergleichprodukt) AND in_array(0,$vergleichprodukt)) { ?>
<a href="<?php echo $PHP_SELF."?del_vergleich=wert1"; ?>">aus Liste löschen</a>
<?php }
else { ?>
<a href="<?php echo $PHP_SELF."?vergleich=wert1"; ?>">wert1</a>
<?php } ?>
<br>
<?php if (isset($vergleichprodukt) AND in_array("wert2",$vergleichprodukt)) { ?>
<a href="<?php echo $PHP_SELF."?del_vergleich=wert2"; ?>">aus Liste löschen</a>
<?php }
else { ?>
<a href="<?php echo $PHP_SELF."?vergleich=wert2"; ?>">wert2</a>
<?php } ?>
<br>
<?php if (isset($vergleichprodukt) AND in_array("wert3",$vergleichprodukt)) { ?>
<a href="<?php echo $PHP_SELF."?del_vergleich=wert3"; ?>">aus Liste löschen</a>
<?php }
else { ?>
<a href="<?php echo $PHP_SELF."?vergleich=wert3"; ?>">wert3</a>
<?php } ?>
<br>
<a href="<?php echo $PHP_SELF; ?>">main</a>
<br>
<table width="50" border="1">
<?php
if(isset($vergleichprodukt)){
foreach($vergleichprodukt as $name => $wert) { ?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $wert; ?></td>
</tr>
<?php }
}
else { ?>
<tr>
<td>Leer</td>
</tr>
<?php } ?>
</table>
</body>
</html>
Wenn ich mit index(?), sprich Zahlen, arbeite, funktioniert es auch nicht perfekt, manchmal kommt es zu einem Durcheiander und falsche Werte werden gelöscht.
Es ist nicht nachvollziehbar wie es passiert, sonst könnte ich Euch mehr zu sagen.
Auch die Suche hier bringt nichts nachvollziehbares, aber eine Frage schon.
Mit foreach() soll es funktionieren, bedeutet es damit jedesmal nach unset() ein neues Array aufzubauen?
Egal, ich schweife ab, ich brauche einfach Hilfe beim Array Element löschen.
Kann mir jemand bei meinem Code die Fehler aufzeigen?
Ich danke Euch!
HeikoH
Huhu Heiko
hui, das sieht nach einer schweren Pehaperitis aus.
Als Gegenmittel würde ich da eine Mixtur aus Superalis Globalus,
Arreius Elementus und Hereus Docus [1] empfehlen.
Wie lange bist Du denn noch wach?
Viele Grüße
lulu
[1] die Lateiner mögen mir verzeihen, ich musste mich halt mit "la famille Leroc" rumschlagen während alle anderen blutrünstige Helden- und Schlachtengeschichten übersetzen durften.
Huhu Heiko
HuHu LuLu
hui, das sieht nach einer schweren Pehaperitis aus.
nach WAS???
Als Gegenmittel würde ich da eine Mixtur aus Superalis Globalus,
Arreius Elementus und Hereus Docus [1] empfehlen.
OhHa!
Wie lange bist Du denn noch wach?
Noch lange (schaut so aus)
Viele Grüße
...auch von mir
lulu
HeikoH
[1] die Lateiner mögen mir verzeihen, ich musste mich halt mit "la famille Leroc" rumschlagen während alle anderen blutrünstige Helden- und Schlachtengeschichten übersetzen durften.
...was auch immer das auch ist...
Hallo Heiko
Wie lange bist Du denn noch wach?
Noch lange (schaut so aus)
Fein.
Also erstmal würde ich Dir empfehlen Dein Skript etwas übersichtlicher
aufzubauen.
Die Programmlogik oder Verarbeitung der Daten an den Anfang, das HTML
an das Ende.
Ich schnippel erstmal grosszügig alles weg dann bleibt ungefähr das hier übrig:
<?php
echo <<< EOT
<html>
<head>
</head>
<body>
$navigation
<table width="50" border="1">
$listofproducts
</table>
</body>
</html>
EOT;
?>
Sehr nützlich für längere HTML-Abschnitte ist die here doc Schreibweiser, lies dazu http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc
Viele Grüße
lulu
Hello Lulu,
Ich schnippel erstmal grosszügig alles weg dann bleibt ungefähr das hier übrig:
<?php
echo <<< EOT
...
EOT;
?>
Sehr nützlich für längere HTML-Abschnitte ist die here doc Schreibweiser, lies dazu http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc
Du weißt hoffentlich, dass die heredoc-Syntax Probleme macht, wenn man das Speicherformat (DOS, MAC, UNIX) nicht einhält?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Huhu Tom
Du weißt hoffentlich, dass die heredoc-Syntax Probleme macht, wenn man das Speicherformat (DOS, MAC, UNIX) nicht einhält?
Nö, was meinst Du? Die unterschiedlichen Steuerzeichen bei Zeilenumbrüchen vielleicht?
Das liegt dann wohl eher am FTP-Client wenn der beim kopieren Murx macht.
Naja, am Mac mache ich eigentlich nie was, also bisher hatte ich keine
Probleme.
Gute Nacht
lulu
Hallo LuLu
Wie lange bist Du denn noch wach?
Noch lange (schaut so aus)
Fein.
Warum?
Also erstmal würde ich Dir empfehlen Dein Skript etwas übersichtlicher
aufzubauen.
Sorry, für mich ist es übersichtlich, wenn es für Euch nicht so toll ist, ich bin lernfähig (aber heute nicht mehr so ganz).
Die Programmlogik oder Verarbeitung der Daten an den Anfang, das HTML
an das Ende.Ich schnippel erstmal grosszügig alles weg dann bleibt ungefähr das hier übrig:
<?php
echo <<< EOT
<html>
</body>
</html>
EOT;
?>
Wo ist mein Rest? Was ist EOT?
Sehr nützlich für längere HTML-Abschnitte ist die here doc Schreibweiser, lies dazu http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc
Das schaut recht kompliziert aus, nichts für den heutigen Abend.
Könnt ihr mir nicht doch einen Tip geben, wie es mir gelingt ein Element aus einem Array zu löschen?
Und auch ein Beispiel für das Ausgliedern vom Code. Ich mache das immer mit extra Dateien welche ich mit include() einbinde.
HeikoH
Hello,
Könnt ihr mir nicht doch einen Tip geben, wie es mir gelingt ein Element aus einem Array zu löschen?
so wie Du es versucht hast, nur das Element muss auch vorhanden sein.
$_data = array();
$_data['eins'] = 'Hallo';
$_data['zwei'] = 'World';
print_r($_data);
unset($_data['zwei']);
print_r($_data);
Probier das mal aus...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
print_r($_data);
Probier das mal aus...
es funktioniert, kann es sein das ich nicht die Variable $name löschen will, sondern den $wert?
Dann muss ich mein Array ändern, da mir "$namen" ja ausreichen...
HeikoH
Hallo Tom,
übertragen in mein, ich gebe es zu, unübersichtlichen Code funktioniert es auch, allerdings verhaspelt er sich manchmal.
Da steht im Array nur noch ein Element drin, aber bei den Links werden zwei "aus Liste löschen" angezeigt.
Oder alles ist lehr, ich drücke ein Link, es wird link 1 und Link 2 als "aus Liste löschen angezeigt" aber nur ein Element ist im Array vorhanden...
Ich verzweifel einfach mal.
HeikoH
Hello,
du solltst Di auf jeden Fall eine passenden Vorstellung von den Arrays machen.
Arrays sind in PHP verkettete Listen.
<img src="http://selfhtml.bitworks.de/EinfachesArray500.gif" border="0" alt="">
Und wenn Du mehrdimensionale Arrays hast, dann können in den Knoten anstelle eines Wertes die Anfangspunkte für eine neue Kette liegen:
<img src="http://selfhtml.bitworks.de/VerzweigtesArray500.gif" border="0" alt="">
Und schau Dir nochmla genau die Arrayfunktionen an:
http://de3.php.net/manual/de/ref.array.php
Insbesondere count() und foreach().
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
<img src="http://selfhtml.bitworks.de/VerzweigtesArray500.gif" border="0" alt="">
dieses Bild hatte ich schon in der Suchfunktion hier gefunden.
Ist meiner Meinung nach, die beste Arrayerklärung!
Und schau Dir nochmla genau die Arrayfunktionen an:
und das die beste ANleitung.
Ich danke Dir!
HeikoH
Huhu Heiko
Ist meiner Meinung nach, die beste Arrayerklärung!
und das die beste ANleitung.
Ich danke Dir!
Mmmmh, kann es sein dass da ein Hauch von Ironie mitschwingt?
Wenn nein ist ja alles bestens.
Ansonsten gibt es ja noch andere Erklärungen und Anleitungen.
Z.B. diese hier
http://php-faq.de/ch/ch-arrays.html
http://schattenbaum.net/php/array.php
Viele Grüße
lulu
Huhu Heiko
Wo ist mein Rest?
Tja, den habe ich mal ein wenig umgebaut, ich weiss nicht ob ich
begriffen habe was Du eigentlich umsetzen möchtest, aber naja.
Ist wirklich schon ein bischen spät.
Also eigentlich wollte ich Dir empfehlen Dich mit Arrays im allgemeinen um mit den super global Arrays im besonderen zu beschäftigen.
Hier mal eine Version mit super global Arrays etc.
So ungefähr würde ich es jedenfalls machen, nur als Vorschlag ...
<?php
session_start();
// ggf. Session- Variable initialisieren
if (!isset($_SESSION['vergleichprodukt'])) {
$_SESSION['vergleichprodukt'] = array();
}
// ggf. Produkt hinzufuegen
if (isset($_GET['add'])) {
array_push($_SESSION['vergleichprodukt'], $_GET['add']);
}
// ggf. Produkt entfernen
if (isset($_GET['remove'])) {
$k = array_search($_GET['remove'], $_SESSION['vergleichprodukt']);
unset($_SESSION['vergleichprodukt'][$k]);
}
$produkte = array(
1 => 'Taschenlampe',
2 => 'Taschenmesser',
3 => 'Taschenflasche',
4 => 'Taschenbär',
);
$navigation = '';
foreach ($produkte as $k => $v){
if (in_array($k, $_SESSION['vergleichprodukt'])){
$navigation .= <<< EOT
<a href="{$_SERVER['PHP_SELF']}?remove=$k">$v aus Liste löschen</a><br>
EOT;
}else{
$navigation .= <<< EOT
<a href="{$_SERVER['PHP_SELF']}?add=$k">$v zur Liste hinzufügen</a><br>
EOT;
}
}
$listofproducts = '';
if (count($_SESSION['vergleichprodukt']) > 0){
foreach($_SESSION['vergleichprodukt'] as $k) {
$v = $produkte[$k];
$listofproducts .= sprintf('<tr><td>%s</td><td>%s</td></tr>', $k, $v);
}
}else{
$listofproducts = '<tr><td>Leer</td></tr>';
}
echo <<< EOT
<html>
<head>
</head>
<body>
$navigation
<table width="50" border="1">
$listofproducts
</table>
</body>
</html>
EOT;
?>
Was ist EOT?
EOT steht für "end of text".
Gute Nacht und viele Grüße
lulu
Hello,
echo <<< EOT
<html>
<head>
</head><body>
$navigation
<table width="50" border="1">
$listofproducts
</table>
</body>
</html>
EOT;
?>
Was ist EOT?
EOT steht für "end of text".
Du kannst aber auch jeden anderen Bezichner benutzen, der noch frei ist.
In der obersten Zeile wird der Textblock mit '<<< EOT' eingeleitet und
in der zeile vor dem PHP-Schließ-Tag steht 'EOT;' für das Ende des Blockes.
Man könnte die Marken auch als eine zusätzliche Art Häkchen oder "Superhäkchen"
bezeichnen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Huhu Tom
Du kannst aber auch jeden anderen Bezeichner benutzen, der noch frei ist.
Ja, dass habe ich eine zeitlang auch fleissig benutzt und mir immer
ganz kreativ neue Bezeichner für EOT ausgedacht.
Das fand ich dann aber irgendwann doch unsinnig und benutze jetzt
nur noch EOT, das ist ja quasi standard.
Und ich wundere mich später nicht wenn da irgendwo im Quelltext ein
SOUNDNUISSESHIERZUENDE;
oder ähnliches steht.
Bei EOT; weiß ich halt gleich aha, da ist das Ende eines here doc Abschnittes.
Viele Grüße
lulu
Hello,
session_register("vergleichprodukt");
Das sollte man nicht mehr verwenden, sondern $_SESSION['vergleichprodukt'] = wert;
if (isset($del_vergleich)) {
unset($vergleichprodukt['$del_vergleich']);
}
Und hier wäre es günstiger
unset($vergleichprodukt[$del_vergleich]);
zu schreiben.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Das sollte man nicht mehr verwenden, sondern $_SESSION['vergleichprodukt'] = wert;
Danke Dir, ich bin da etwas altmodisch NOCH, leider...
Und hier wäre es günstiger
unset($vergleichprodukt[$del_vergleich]);
zu schreiben.
...funktioniert aber auch nicht.
Trotzdem danke der Hinweise.
HeikoH
Hello,
...funktioniert aber auch nicht.
Trotzdem danke der Hinweise.
Dann solltet Du in Deinem Script während der Testphase ganz vorne:
ini_set('track_errors','1');
error_reporting(E_ALL);
aufnehmen. Dann solltst Du entsprechende Warungen bekommen, wenn Du versuchst, nicht vorhandene Elemente (Variablen) zu löschen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
ini_set('track_errors','1');
wofür ist das eigentlich?
Hello,
ini_set('track_errors','1');
wofür ist das eigentlich?
Das ist dafür gut, dass erweiterte Fehlermeldungen generiert werden.
So steht dann z.B. in der Variable $php_errormsg die Fehlermeldung mit Zeilennummer zur Verfügung, auch wenn man diese aus diversen Gründen z.B. unterdrückt hat:
$fh = @fopen(...);
wenn das nun einen Fehler auslöst, sthet die Meldung in $php_errormsg.
Speziell, wenn man mit header() arbeitet, will man häufig die Fehlermeldung nicht sofort sehen, sondern erst nach dem Senden des Headers.
http://de3.php.net/manual/de/function.error-reporting.php
Außerdem stehen Werte in den "Magischen Konstanten" zur Verfügung.
http://de2.php.net/manual/de/language.constants.predefined.php
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
ini_set('track_errors','1');
error_reporting(E_ALL);
kannte ich überhaupt nicht, muss mal in den Manuals nachschauen was das ist.
aufnehmen. Dann solltst Du entsprechende Warungen bekommen, wenn Du versuchst, nicht vorhandene Elemente (Variablen) zu löschen.
ich habe es nach session_start() und als erstes im BODY eingefügt, passiert aber nichts!?!
Grüsse von
HeikoH