[PHP] array und doppelten eintrag löschen

Dirk

Well-known member
24 April 2006
185
11
Hallo ich habe folgendes array in der variabele $artikel
Code:
Array (3)
0 => Array (2)
  name => artikel1
  preis_mtl => 0.747899159663866
1 => Array (2)
  name => artikel2
  preis_mtl => 84.0336134453782
2 => Array (2)
  name => artikel1
  preis_mtl => 84.0336134453782

wenn wir genau hinschauen, ist artikel1 doppelt. wie bekomme ich den alten (also den oben) rausgelöscht?

Ich erkläre euch mal kurz wie ich zu dem array komme ich lese alle artikel (so ca 30stck) aus der datenbank aus. jetzt habe ich aber noch kunden die besondere preise, aber nicht bei allen artikeln, bekommen für die habe ich nochmal ein tabelle

das ganze sieht dann so aus

PHP:
   $select = "SELECT artikelname, preis_mtl FROM artikel order by preis_mtl";
   $result = mysql_query($select);

   $artikel1 = array();
   while ($row = mysql_fetch_assoc($result))
   {
      array_push($artikel1, array(
         'name' => $row['artikelname'],
         'preis_mtl' => $row['preis_mtl']
         )
      );
   }
   $select2 = "SELECT artikelname, preis_mtl FROM kunden_artikel where knr=$g_knr order by preis_mtl";
   $result2 = mysql_query($select2);

   $artikel2 = array();
   while ($row2 = mysql_fetch_assoc($result2))
   {
      array_push($domains2, array(
         'name' => $row2['artikelname'],
         'preis_mtl' => $row2['preis_mtl']
         )
      );
   }

So somit wären beide ausgelesen


PHP:
$artikel = array_merge($artikel1,$artikel2);

es gibt ja z.b. array_unique(); damit überschreibe ich aber das ganze array und nicht nur ein teil, wenn ich es anwende.

wäre schön wenn ich einen gedankenstoß bekommen würde

Danke
 
Ich würde mit assoziativen Arrays arbeiten. Dadurch überschreibst Du automatisch den alten Eintrag, wenn ein neuer dazukommt.

Statt $artikel1 und $artikel2 hättest Du dann nur noch ein Array $artikel und müsstest nur folgende Änderungen vornehmen:
PHP:
/*
      array_push($artikel1, array(
         'name' => $row['artikelname'],
         'preis_mtl' => $row['preis_mtl']
         )
      );
*/
$artikel[$row['artikelname'] = array('name'=>$row['artikelname'], 'preis_mtl'=>$row['preis_mtl']);
An der Stelle mit $artikel2 natürlich analog.
 
das ist ja das ding $artikel2 ist ja der aktuelle preis für den artikel und kunden
 
Etwas verwirrend.. Mal redest du von $artikel, dann steht da drin $artikel1 und $artikel2 heißt auch mal $domains2..

So wie ich das sehe gibt es mehrere Möglichkeiten für dein Problem:
1. Du löschst du "doppelten" Preise aus der Datenbank, folglich wird nur noch ein Preis ausgelesen
2. Solltest du die doppelten Preise in der Datenbank haben, um eine Historie aufzubauen, solltest du sinnigerweise auch eine "gültig ab"-Spalte einführen. Mit dieser kannst du dann die Abfrage ganz einfach nach den aktuellsten Einträgen filtern
3. Du baust dir dein Array so auf, wie es dir tleilax vorgeschlagen hat. Ich weiß nicht, was darin nicht passen sollte.

Du könntest ja auch mal erklären, wie die Tabellen artikel und kunden_artikel zusammenhängen und welche Art von Daten dort gespeichert werden. Also wie sind diese Tabellen aufgebaut?