Michael W.: Array nach nummern Sortieren

hallo,

ich habe hier ein warenkorb system auf die beine gestellt jedeoch funktioniert das löschen eines artikels noch nicht. ich denke es liegt dadran dass die nummer bestehen bleibt und als "null" ausgegeben wird:

http://mitglied.lycos.de/djwoelk3/test/zeile/start.php

start legt nur die nötigen arrays an.

karte.php:
---------

<?php
session_start();
if (isset ($arr_nr))
{

$nr = $_GET['nr'];
$euro = $_GET['euro'];
$text = $_GET['text'];

$arr_nr[] = $nr;
$arr_euro[] = $euro;
$arr_text[] = $text;

$summe = 0;
for ($i=0;$i<count($arr_euro); $i++)
{
   $summe+= $arr_euro[$i];
}

if (isset ($del))
{

$del_nr = $_GET['del'];
$del_euro = $_GET['del'];
$del_text = $_GET['del'];

unset($arr_nr[$del_nr]);
unset($arr_euro[$del_euro]);
unset($arr_text[$del_text]);
}

print "<table border="1" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0" width="70%">";
print "<tr>";
print "<td align="center" width="41">Nr.</td>";
print "<td align="center" width="100">Bestell-Nr.</td>";
print "<td align="center" width="270">Beschreibung</td>";
print "<td align="center">Preis</td>";
print "</tr>";

for($i=1;$i<count($arr_nr);$i++)
{
print "<tr>";
print "<td align="center">".$i."<a href="karte.php?del=$i">Löschen</a></td>";
print "<td align="center">".$arr_nr[$i]."</td>";
print "<td align="center">".$arr_text[$i]."</td>";
print "<td align="center">".$arr_euro[$i]." € </td>";
print "</tr>";
}
print "<tr>";
print "<td align="center"></td>";
print "<td align="center"></td>";
print "<td align="center"></td>";
print "<td align="center"></td>";
print "</tr>";
print "</table>";

print "<table width="70%">";
print "<tr>";
print "<td align="center" width="450"></td>";
print "<td align="center" style="border-style: solid; border-width: 1">".array_sum($arr_euro)." € </td>";
print "</tr>";
print "</table>";

session_register("arr_nr");
session_register("arr_euro");
session_register("arr_text");
}
else
{
print "Ein Fehler ist aufgetreten starten sie die Seite Neu. <a href="start.php">Neu Starten ...</a>";
}
?>
<br>
<br>
<br>
<a href="karte.php?nr=001&euro=4.70&text=Salami Pizza Classic">001</a>
<a href="karte.php?nr=002&euro=5.20&text=Hawaii Pizza">002</a>
<a href="karte.php?nr=003&euro=1.20&text=Cola">003</a>
<br>
<br>
<br>
<a href="start.php">Neu Starten ...</a>

----------

dieser teil hier soll inhalte aus einem array löschen:

if (isset ($del))
{

$del_nr = $_GET['del'];
$del_euro = $_GET['del'];
$del_text = $_GET['del'];

unset($arr_nr[$del_nr]);
unset($arr_euro[$del_euro]);
unset($arr_text[$del_text]);
}

jedoch bringt er den inhalt nur auf "Null" und gbt ihn als "Null" aus. ich habe gedacht wenn man das array dan nach nummer sortiert, dass dann keine lücken mehr bestehen, nur weiss ich 1. nicht wie das geht und 2. wenn ich ersteinmal was gelöscht habe geht gar nichts mehr ...

warum ?????

Danke

  1. Hallo

    ich habe hier ein warenkorb system auf die beine gestellt jedeoch funktioniert das löschen eines artikels noch nicht. ich denke es liegt dadran dass die nummer bestehen bleibt und als "null" ausgegeben wird:

    dieser teil hier soll inhalte aus einem array löschen:

    if (isset ($del))
    {

    $del_nr = $_GET['del'];
    $del_euro = $_GET['del'];
    $del_text = $_GET['del'];

    unset($arr_nr[$del_nr]);
    unset($arr_euro[$del_euro]);
    unset($arr_text[$del_text]);
    }

    jedoch bringt er den inhalt nur auf "Null" und gbt ihn als "Null" aus. ich habe gedacht wenn man das array dan nach nummer sortiert, dass dann keine lücken mehr bestehen, nur weiss ich 1. nicht wie das geht und 2. wenn ich ersteinmal was gelöscht habe geht gar nichts mehr ...

    Probier mal das:
    http://www.selfphp.info/funktionsreferenz/array_funktionen/array_splice.php

    Auge

    1. hallo,

      das war schon nicht schlecht, aber kein beispiel trifft auf meines zu da es den inhalt bis zum ende entfernt. ich möchte gezielte zeieln entfernen.

      1. hallo,

        das war schon nicht schlecht, aber kein beispiel trifft auf meines zu da es den inhalt bis zum ende entfernt. ich möchte gezielte zeieln entfernen.

        wieso?? es gibt eine start und die anzahl die gelöscht werden soll... die anzahl auf 1 und schon wir nur eine gezielte zeile gelöscht...

        gruss
        horst

        1. geb mal ein beispiel.

          Danke

          1. probiers mal hier mit (hab ich aus einem buch):

            $k_array = array ("Hund", "Katze", "Maus");
            array_splice($k_array,1,1);

            nun müsste die katze gelöscht sein... (weil sie im array an stelle 1 steht)

            probiers halt mal aus..

            gruss
            horst

          2. Tach

            geb mal ein beispiel.

            Nicht "geb mal ein beispiel"!
            Selberlesen! Ich zitiere auch für dich:

            <zitat>
            array array_splice(array input, int offset [, int length [, array replacement]])

            Die Funktion array_splice() ersetzt oder entfernt einen Teilbereich aus einem
            Array (input). Der Teilbereich ist definiert durch den Index des ersten Elements
            (offset) und die Anzahl der Elemente (length, Default-Wert sind alle Elemente bis
            zum Ende des Arrays). Enthält der Parameter replacement ein Array, fügt die
            Funktion dieses Array an der Stelle ein, wo sie die gewünschten Elemente
            entfernt hat.
            Das so entstandene Array wird als Funktionsergebnis zurückgegeben.
            Der Parameter offset gibt den Index des Startelements an. Ist offset positiv, so
            wird vom Anfang des Arrays gezählt. Ist offset hingegen negativ, so wird vom
            Ende des Arrays gezählt.

            <?PHP
            $array1 = array("php","asp","perl","c","test");
            $array2 = array_splice($array1, 1, -2);
            for($x=0;$x<count($array1);$x++){
              echo $array1[$x] . "<br>";
            }
            ?>
            </zitat>
            Da ist die Erklärung und ein Beispiel. Wo ist das Problem?

            Danke

            Bitte

            1. hallo,

              ich habs jetzt echt ausgetestet und alle variationen versucht eine davon war die hier:

              $del = $_GET['del'];
              if (isset ($del))
              {
              $arr_nr   = array_splice($arr_nr, 1, $del);
              $arr_euro = array_splice($arr_euro, 1, $del);
              $arr_text = array_splice($arr_text, 1, $del);
              }

              und dabei macht er folgendes:
              bei einem array von beispielsweise 8 zeilen als output löscht er, wenn ich beispielsweise auf löschen in der zeile 5 klicke, alle zeieln die nach 4 kommen bzw nach 5, 1-4 bleibt noch stehen.

              ich schaff es irgendiwe nicht nur die zeiel zu löschen die ich an klicke.

              und noch ne frage: brauche ich $GET['id'] ? denn wenn ich mit einem link eine variable übergebe brauche ich sie doch nihct mehr "getten", oder ?

              hoffe ich bekomme hilreiche antworten.
              Danke

              1. Tach

                und dabei macht er folgendes:
                bei einem array von beispielsweise 8 zeilen als output löscht er, wenn ich beispielsweise auf löschen in der zeile 5 klicke, alle zeieln die nach 4 kommen bzw nach 5, 1-4 bleibt noch stehen.

                Also nochmal:

                array array_splice(array input, int offset [, int length [, array replacement]])

                Die Funktion array_splice() ersetzt oder entfernt einen Teilbereich aus einem Array (input).

                soweit klar.

                Der Teilbereich ist definiert durch den Index des ersten Elements

                (offset) und die Anzahl der Elemente (length, Default-Wert sind alle Elemente bis
                zum Ende des Arrays).

                Also erst der offset (Nummer des Elements, _ab_dem_ gelöscht werden soll)
                und dann die length (Anzahl der Elemente, die gelöscht werden sollen)

                So nu guck dir mal deine Konstruktion an, da ist was durcheinander geraten.

                Außerdem probier mal z.B.:
                   $arr_nr = array_splice($arr_nr, $del, 1);
                und:
                   array_splice($arr_nr, $del, 1);

                Bei einem der Beispiele wird nämlich das gelöschte Element zurückgegeben,
                beim Anderen ist es der Rest des Arrays ohne das gelöschte Element.

                Auge

                1. Ich hab mir gestern schon so geholfen:

                  <?php

                  $input = array ("a", "b", "c", "d", "e");
                  $offset = '0';
                  $length = '1';

                  array_splice ($input, $offset, 1);

                  print "<br><br>Bei:<br>";
                  echo join(',',$input);
                  print "<br><br>";
                  print "<br>offset: ".$offset."<br>length: ".$length;
                  ?>

                  so konnte ich einfach offset und length variieren (schreibt man das so ?). und dann bin ich auch auf das ergebnis gekommen - nun hatte ich das problem mit der schleife, denn $i = 1 war da ich es in der tabelle als zähler benutzt hatte:

                  produkt nr.      beschreibung            euro
                  1                    xxx                1,20 €
                  2                    xxx                2,50 €
                  3                    xxx                3,60 €

                  das musste ich ändern, denn wenn auf den löschen link geklickt habe der ja auch mit diesem zähler versehen ist, dann hätte ich bei produkt 2 beispielsweise <..."?del=2"> gehabt und das hätte aber 1 gelöscht, auf dieses ergebniss bin ich auch beim rumspeielen gekommen, was ergen hat dass
                  a = 0
                  b = 1
                  c = 2
                  usw ist.

                  nunn musste ich den counter wieder auf $=0 stellen und folgende vorkehrung treffen:

                  ---------------
                  ...
                  for($i=0;$i<count($arr_nr);$i++)
                  {
                  $eins = '1';
                  $ii = $i+$eins;
                  print "<tr>";
                  print "<td align="center">".$ii."<a href="karte.php?del=$i">Löschen</a></td>";
                  print "<td align="center">".$arr_nr[$i]."</td>";
                  print "<td align="center">".$arr_text[$i]."</td>";
                  print "<td align="center">".$arr_euro[$i]." € </td>";
                  print "</tr>";
                  }

                  ...
                  --------------

                  so klappts auch mit dem link

                  nun habe ich flgendes problem:
                  http://mitglied.lycos.de/djwoelk3/test/zeile/start.php

                  die zeielen werden nur auf "null" gesetzt. und verschieben sich nach oben ...

                  was nun ?