Selektierte Array Ausgabe

Murkasfjphy

Grünschnabel
Hallo,

ich habe einen Array sortiert nach "Artikel Nr." und "Vk Preis". Es
kann vorkommen, das der gleiche Artikel mit der gleichen Artikel Nr.
mehrfach in dem Array enthalten ist (von verschiedenen Lieferanten)

Beispiel:
id__bezeichnung_art_nr_lagerbest_vk_preis
0____artikel_1___1000____5_____100,00
1____artikel_1___1000____8_____102,00
2____artikel_1___1000____0_____105,00
3____artikel_2___1001____0______90,00
4____artikel_2___1001____5______95,00
5____artikel_2___1001____2______98,00

Wie kann ich den Array so ausgeben, das ausschließlich der Artikel
mit dem günstigsten Preis - und nur wenn von diesem der Lagerbestand =
0 ist, der Artikel mit dem zweit günstigsten Preis usw. ausgegeben
wird?
Nach dem Beispiel oben sollten die Artikel mit der id=0 und id=4
angezeigt werden.

Wichtig ist natürlich, das die Ausgabe auch bei einer Liste von 50 und
mehr Artikeln noch mit einer akzeptablen Geschwindigkeit läuft.

Hat jemand einen Tipp für mich?

Danke + Gruß

Marcel
 
Mal so dahin geschmiert... ;)

PHP:
<?php

$array = array(
			array(
				'id' => 0,
				'artnr' => 1000,
				'lager' => 5,
				'preis' => 100				
			),
			array(
				'id' => 1,
				'artnr' => 1000,
				'lager' => 8,
				'preis' => 102				
			),
			array(
				'id' => 2,
				'artnr' => 1000,
				'lager' => 0,
				'preis' => 105				
			),
			array(
				'id' => 3,
				'artnr' => 1001,
				'lager' => 0,
				'preis' => 90				
			),
			array(
				'id' => 4,
				'artnr' => 1001,
				'lager' => 5,
				'preis' => 95				
			),
			array(
				'id' => 5,
				'artnr' => 1001,
				'lager' => 8,
				'preis' => 98				
			),
		);

$retArr = array();
foreach($array as $value)
{
	if(!isset($retArr[$value['artnr']]) && $value['lager'] > 0)
	{
		$retArr[$value['artnr']] = $value;
	}
	elseif(isset($retArr[$value['artnr']]))
	{
		if($value['preis'] < $retArr[$value['artnr']]['preis'] && $value['lager'] > 0)
		{
			$retArr[$value['artnr']] = $value;
		}
	}
}

echo '<pre>'.print_r($retArr, true).'</pre>';
?>
 
Hallo Felix,

tausend Dank für das Script. Das sieht schon mal ganz gut.
Nur leider ist der Array index gleich der artnr Das ist leider nicht so gut.

Wie kann man das ändern?

Marcel

Zur Verdeutlichung hier die Ausgabe des Scriptes:

Array
(
[1000] => Array
(
[id] => 0
[artnr] => 1000
[lager] => 5
[preis] => 100
)

[1001] => Array
(
[id] => 4
[artnr] => 1001
[lager] => 5
[preis] => 95
)

)
 
Hallo Felix,

Super, das funktioniert prima.
Mit sort() stimmt der index wieder.

Ich habe das ganze jetzt in eine Function() gepackt und dahingehend erweitert, das der User auswählen kann, ob er den günstigsten Preis auch ohne Lagerbestand oder den günstigsten Preis mit Lagerbestand angezeigt bekommen möchte.

Ich müsste den Array aber noch nach mehreren Feldern sortieren.
Also z.B. nach bezeichnung_dann nach lagerbest_und vk_preis
oder nach art_nr und vk_preis
und noch weitere Felder....

Hast Du dazu auch noch einen Tipp?

Aber auch so schon Tausend Dank für Deine Hilfe!

Gruß Marcel
 
Zurück