aus einem array doppelten eintrag löschen

Duergy

Mitglied
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


CODE $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



CODE
$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
 
Hoi Duergy,

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


ich würde das ganze mit associative arrays lösen. da $row['artikelname'] als key verwendet wird, bist du sicher das nur ein artikel1 in dein array vorkommt...

anstatt:
---------
array_push($artikel1, array(
'name' => $row['artikelname'],
'preis_mtl' => $row['preis_mtl']
)
);
----------
$artikel1[$row['artikelname']] => $row['preis_mtl'];

gruss
Steven
 
Unterstützt das Db-System Unterabfragen und irgendetwas wie Case oder CoalEsce? Falls ja, geht das direkt mit einer Select-Abfrage (Code für den MS-SqlServer):

QUOTE Select CoalEsce(B.artikelname, A.artikelname) As Artikelname,
CoalEsce(B.preis_mtl, A.preis_mtl) As preis_mtl
From artikel As A Left Join
(Select C.ArtikelId, C.artikelname, C.preis_mtl From kunden_artikel As C where C.knr=$g_kn) As B
On A.ArtikelId = B.ArtikelId


Was man mit Sql bereits zusammenschmeißen kann, sollte man dort sofort machen - nicht erst rausexportieren und dann müsamst zusammenpfriemeln.
 
hmm das verstehe ich jetzt nicht so ganz, ne andere möglichkeit wäre es natürlich (fällt mir gerade ein) zuerst das array vom kunden machen und das dann wiederum auszulesen und bei der sql abfrage diese dann auszuschließen zwar umständlich aber würde ja auch gehen oder?
 
QUOTE (jAuer @ Do 8.3.2007, 10:49) Unterstützt das Db-System Unterabfragen und irgendetwas wie Case oder CoalEsce? Falls ja, geht das direkt mit einer Select-Abfrage (Code für den MS-SqlServer):


QUOTE Select CoalEsce(B.artikelname, A.artikelname) As Artikelname,
CoalEsce(B.preis_mtl, A.preis_mtl) As preis_mtl
From artikel As A Left Join
(Select C.ArtikelId, C.artikelname, C.preis_mtl From kunden_artikel As C where C.knr=$g_kn) As B
On A.ArtikelId = B.ArtikelId


Was man mit Sql bereits zusammenschmeißen kann, sollte man dort sofort machen - nicht erst rausexportieren und dann müsamst zusammenpfriemeln.

joah stimmt das müsste gehen ich probiers mal danke schonmal
 
Zurück
Oben