dax4fun
Goto Top

Array kürzen

Es tut was es soll, aber kann man das irgendwie kürzen da ich jede mögliche art versucht habe Arrays anzusprechen und nur diese mich zum Ziel brachte.
$sql = "SELECT * FROM `abc` ORDER BY RAND() LIMIT 4";  
$result = $conn->query($sql);

$list = array();
while ($row = mysqli_fetch_assoc($result)) {
   $list = $row;
} 


if ($artikelposten == 4) {
	if ($list['vkpreis']<3) {$menge40e = rand(200, 400);}  
	if ($list['vkpreis']>3 && $list['vkpreis']<=20) {$menge40e = rand(20, 40);}  
	if ($list['vkpreis']>20 && $list['vkpreis']<=50) {$menge40e = rand(5, 10);}  
	if ($list['vkpreis']>50) {$menge40e = 1;}  
	
	if ($list[1]['vkpreis']<3) {$menge41e = rand(200, 400);}  
	if ($list[1]['vkpreis']>3 && $list[1]['vkpreis']<=20) {$menge41e = rand(20, 40);}  
	if ($list[1]['vkpreis']>20 && $list[1]['vkpreis']<=50) {$menge41e = rand(5, 10);}  
	if ($list[1]['vkpreis']>50) {$menge41e = 1;}  
	
	if ($list[2]['vkpreis']<3) {$menge42e = rand(200, 400);}  
	if ($list[2]['vkpreis']>3 && $list[2]['vkpreis']<=20) {$menge42e = rand(20, 40);}  
	if ($list[2]['vkpreis']>20 && $list[2]['vkpreis']<=50) {$menge42e = rand(5, 10);}  
	if ($list[2]['vkpreis']>50) {$menge42e = 1;}  
	
	if ($list[3]['vkpreis']<3) {$menge43e = rand(200, 400);}  
	if ($list[3]['vkpreis']>3 && $list[3]['vkpreis']<=20) {$menge43e = rand(20, 40);}  
	if ($list[3]['vkpreis']>20 && $list[3]['vkpreis']<=50) {$menge43e = rand(5, 10);}  
	if ($list[3]['vkpreis']>50) {$menge43e = 1;}  
	
$rechnungs_posten = array(
	array($list['artikel'], $list['beschreibung'], $menge40e, $list['me'], $list['vkpreis'], $list['rabatt'], $list['rabatt2'], $list['lieferungsnummer'], $list['betrag']),  
	array($list[1]['artikel'], $list[1]['beschreibung'], $menge41e, $list[1]['me'], $list[1]['vkpreis'], $list[1]['rabatt'], $list[1]['rabatt2'], $list[1]['lieferungsnummer'], $list[1]['betrag']),  
	array($list[2]['artikel'], $list[2]['beschreibung'], $menge42e, $list[2]['me'], $list[2]['vkpreis'], $list[2]['rabatt'], $list[2]['rabatt2'], $list[2]['lieferungsnummer'], $list[2]['betrag']),  
        array($list[3]['artikel'], $list[3]['beschreibung'], $menge43e, $list[3]['me'], $list[3]['vkpreis'], $list[3]['rabatt'], $list[3]['rabatt2'], $list[3]['lieferungsnummer'], $list[3]['betrag']));  
	}
if ($artikelposten == 3) {
	if ($list['vkpreis']<3) {$menge30e = rand(200, 400);}  
	if ($list['vkpreis']>3 && $list['vkpreis']<=20) {$menge30e = rand(20, 40);}  
	if ($list['vkpreis']>20 && $list['vkpreis']<=50) {$menge30e = rand(5, 10);}  
	if ($list['vkpreis']>50) {$menge30e = 1;}  
	
	if ($list[1]['vkpreis']<3) {$menge31e = rand(200, 400);}  
	if ($list[1]['vkpreis']>3 && $list[1]['vkpreis']<=20) {$menge31e = rand(20, 40);}  
	if ($list[1]['vkpreis']>20 && $list[1]['vkpreis']<=50) {$menge31e = rand(5, 10);}  
	if ($list[1]['vkpreis']>50) {$menge31e = 1;}  
	
	if ($list[2]['vkpreis']<3) {$menge32e = rand(200, 400);}  
	if ($list[2]['vkpreis']>3 && $list[2]['vkpreis']<=20) {$menge32e = rand(20, 40);}  
	if ($list[2]['vkpreis']>20 && $list[2]['vkpreis']<=50) {$menge32e = rand(5, 10);}  
	if ($list[2]['vkpreis']>50) {$menge32e = 1;}  
	
$rechnungs_posten = array(
	array($list['artikel'], $list['beschreibung'], $menge30e, $list['me'], $list['vkpreis'], $list['rabatt'], $list['rabatt2'], $list['lieferungsnummer'], $list['betrag']),  
	array($list[1]['artikel'], $list[1]['beschreibung'], $menge31e, $list[1]['me'], $list[1]['vkpreis'], $list[1]['rabatt'], $list[1]['rabatt2'], $list[1]['lieferungsnummer'], $list[1]['betrag']),  
        array($list[2]['artikel'], $list[2]['beschreibung'], $menge32e, $list[2]['me'], $list[2]['vkpreis'], $list[2]['rabatt'], $list[2]['rabatt2'], $list[2]['lieferungsnummer'], $list[2]['betrag']));  
	}
	
if ($artikelposten == 2) {
	if ($list['vkpreis']<3) {$menge20e = rand(200, 400);}  
	if ($list['vkpreis']>3 && $list['vkpreis']<=20) {$menge20e = rand(20, 40);}  
	if ($list['vkpreis']>20 && $list['vkpreis']<=50) {$menge20e = rand(5, 10);}  
	if ($list['vkpreis']>50) {$menge20e = 1;}  
	
	if ($list[1]['vkpreis']<3) {$menge21e = rand(200, 400);}  
	if ($list[1]['vkpreis']>3 && $list[1]['vkpreis']<=20) {$menge21e = rand(20, 40);}  
	if ($list[1]['vkpreis']>20 && $list[1]['vkpreis']<=50) {$menge21e = rand(5, 10);}  
	if ($list[1]['vkpreis']>50) {$menge21e = 1;}  
	
	$rechnungs_posten = array(
	array($list['artikel'], $list['beschreibung'], $menge20e, $list['me'], $list['vkpreis'], $list['rabatt'], $list['rabatt2'], $list['lieferungsnummer'], $list['betrag']),  
        array($list[1]['artikel'], $list[1]['beschreibung'], $menge21e, $list[1]['me'], $list[1]['vkpreis'], $list[1]['rabatt'], $list[1]['rabatt2'], $list[1]['lieferungsnummer'], $list[1]['betrag']));  
	}          
if ($artikelposten == 1) {
	if ($list['vkpreis']<3) {$menge10e = rand(200, 400);}  
	if ($list['vkpreis']>3 && $list['vkpreis']<=20) {$menge10e = rand(20, 40);}  
	if ($list['vkpreis']>20 && $list['vkpreis']<=50) {$menge10e = rand(5, 10);}  
	if ($list['vkpreis']>50) {$menge10e = 1;}  
	
	$rechnungs_posten = array(
        array($list['artikel'], $list['beschreibung'], $menge10e, $list['me'], $list['vkpreis'], $list['rabatt'], $list['rabatt2'], $list['lieferungsnummer'], $list['betrag']));  
	}

Content-Key: 375549

Url: https://administrator.de/contentid/375549

Printed on: April 25, 2024 at 15:04 o'clock

Member: Pedant
Solution Pedant May 30, 2018 at 17:31:35 (UTC)
Goto Top
Hallo dax4fun,

der Tread-Titel heißt "Array kürzen".
Es geht Dir aber darum Deinen Code zu verkürzen?

Leg zuerst ein leeres Array an und füge ihm situationsabgängig Elemente hinzu.
Das Folgende könnte ungetesteterweise funktionieren und vermeidet die Wiederholungen:

$sql = "SELECT * FROM `abc` ORDER BY RAND() LIMIT 4";  
$result = $conn->query($sql);

$list = array();
while ($row = mysqli_fetch_assoc($result)) {
   $list = $row;
} 

$rechnungs_posten = array();

if ($artikelposten > 0) {
	if ($list['vkpreis']<3) {$menge40e = rand(200, 400);}  
	if ($list['vkpreis']>3 && $list['vkpreis']<=20) {$menge40e = rand(20, 40);}  
	if ($list['vkpreis']>20 && $list['vkpreis']<=50) {$menge40e = rand(5, 10);}  
	if ($list['vkpreis']>50) {$menge40e = 1;}  
	$rechnungs_posten = array($list['artikel'], $list['beschreibung'], $menge40e, $list['me'], $list['vkpreis'], $list['rabatt'], $list['rabatt2'], $list['lieferungsnummer'], $list['betrag']),  
	}
	
if ($artikelposten > 1) {
	if ($list[1]['vkpreis']<3) {$menge41e = rand(200, 400);}  
	if ($list[1]['vkpreis']>3 && $list[1]['vkpreis']<=20) {$menge41e = rand(20, 40);}  
	if ($list[1]['vkpreis']>20 && $list[1]['vkpreis']<=50) {$menge41e = rand(5, 10);}  
	if ($list[1]['vkpreis']>50) {$menge41e = 1;}  
	$rechnungs_posten[1] = array($list[1]['artikel'], $list[1]['beschreibung'], $menge41e, $list[1]['me'], $list[1]['vkpreis'], $list[1]['rabatt'], $list[1]['rabatt2'], $list[1]['lieferungsnummer'], $list[1]['betrag']),  
	}
	
if ($artikelposten > 2) {
	if ($list[2]['vkpreis']<3) {$menge42e = rand(200, 400);}  
	if ($list[2]['vkpreis']>3 && $list[2]['vkpreis']<=20) {$menge42e = rand(20, 40);}  
	if ($list[2]['vkpreis']>20 && $list[2]['vkpreis']<=50) {$menge42e = rand(5, 10);}  
	if ($list[2]['vkpreis']>50) {$menge42e = 1;}  
	$rechnungs_posten = array($list[2]['artikel'], $list[2]['beschreibung'], $menge42e, $list[2]['me'], $list[2]['vkpreis'], $list[2]['rabatt'], $list[2]['rabatt2'], $list[2]['lieferungsnummer'], $list[2]['betrag']),  
	}
	
if ($artikelposten > 3) {
	if ($list[3]['vkpreis']<3) {$menge43e = rand(200, 400);}  
	if ($list[3]['vkpreis']>3 && $list[3]['vkpreis']<=20) {$menge43e = rand(20, 40);}  
	if ($list[3]['vkpreis']>20 && $list[3]['vkpreis']<=50) {$menge43e = rand(5, 10);}  
	if ($list[3]['vkpreis']>50) {$menge43e = 1;}  
	$rechnungs_posten = array($list[3]['artikel'], $list[3]['beschreibung'], $menge43e, $list[3]['me'], $list[3]['vkpreis'], $list[3]['rabatt'], $list[3]['rabatt2'], $list[3]['lieferungsnummer'], $list[3]['betrag']);  
	}

Gruß Frank
Member: dax4fun
dax4fun May 30, 2018 at 17:57:33 (UTC)
Goto Top
Hi Frank,
bin gerade auf einen Code Schnipsel dran, welchen ich im Netz gefunden hab, es würde mir das alles viel einfacher machen ist aber noch Buggy da ich nicht weiß wie ich es in eine foreach Schleife der SQL Abfrage einbauen kann, da diese ja sowieso endet wenn keine Datensätze vorhanden sind.
$count = 1; 
$loeschen = "loeschen"   
while( $count <= 10) { 
  $dyn_loeschen = $loeschen.$count; 
  if ($$dyn_loeschen) {// frage $loeschen1 bis $loeschen10 ab 
  } 
  $count++; 
}  



Damit würde ich die Daten gleich in der Schleife formatieren und könnte weiteren html Code den ich brauche hinzufügen

das Ziel würde dann so ausschauen
$variable1 = $row['id'].' '.$row['artiekl'].'<br />bezeichnung '.$row['bezeichnung'].'<br /><br />'
Member: Pedant
Solution Pedant May 31, 2018 at 10:15:20 (UTC)
Goto Top
Hallo dax4fun,

Zitat von @dax4fun:

ja, genau. Ein Dank und ein Gruß sind völlig überflüssig. Wir werden hier für unseren Support ohnehin zu gut bezahlt.

Mein vorhergehender Code lässt sich mit einer For-Schleife weiter kürzen und enthält dann keine Code-Wiederholungen mehr.
Er sieht dann so aus:
$sql = "SELECT * FROM `abc` ORDER BY RAND() LIMIT 4";  
$result = $conn->query($sql);

$list = array();
while ($row = mysqli_fetch_assoc($result)) {
   $list = $row;
}

$rechnungs_posten = array();

for ($i=0; $i < $artikelposten; $i++) {
	if ($list[$i]['vkpreis']<3) {$menge40e = rand(200, 400);};  
	if ($list[$i]['vkpreis']>3 && $list[$i]['vkpreis']<=20) {$menge40e = rand(20, 40);};  
	if ($list[$i]['vkpreis']>20 && $list[$i]['vkpreis']<=50) {$menge40e = rand(5, 10);};  
	if ($list[$i]['vkpreis']>50) {$menge40e = 1;};  
	$rechnungs_posten[$i] = array($list[$i]['artikel'], $list[$i]['beschreibung'], $menge40e, $list[$i]['me'], $list[$i]['vkpreis'], $list[$i]['rabatt'], $list[$i]['rabatt2'], $list[$i]['lieferungsnummer'], $list[$i]['betrag']);  
};


Zitat von @dax4fun:
bin gerade an einem Code-Schnipsel dran, welchen ich im Netz gefunden habe
Wozu?
Das Topic hattest Du auf "gelöst" gesetzt.
Ist das jetzt ein neues Thema oder doch noch das alte?

Zitat von @dax4fun:
es würde mir das alles viel einfacher machen
Egal ob neue oder alte Frage, ich kann den Code zwar nachvollziehen, kann aber nicht erkennen was Du damit bezwecken möchtest.

Zitat von @dax4fun:
ist aber noch buggy
  • Zeile2: Fehlendes Semicolon am Zeileende
  • Zeile5: Die Abfrage, ob die Variable belegt ist, sollte so erfolgen:
    if (isset($$dyn_loeschen)) {tuwas;};
    da andernfalls PHP einen Hinweis ausgibt, dass die Variable nicht definiert sei.

Zitat von @dax4fun:
da ich nicht weiß wie ich es in eine Foreach-Schleife der SQL-Abfrage einbauen kann, da diese ja sowieso endet wenn keine Datensätze vorhanden sind.
Wenn diese sowieso endet, wozu dann die Foreach-Schleife?

Zitat von @dax4fun:
das Ziel würde dann so ausschauen
$variable1 = $row['id'].' '.$row['artiekl'].'<br />bezeichnung '.$row['bezeichnung'].'<br /><br />'
Wenn das das Ziel ist, dann ist die Aufgabe ja gelöst (Ziel erreicht).

Gruß Frank
Member: dax4fun
dax4fun May 31, 2018 at 10:42:41 (UTC)
Goto Top
Tut mir sehr leid das es so rübergekommen ist, war auch nicht meine Absicht.

Ich hab es als gelöst markiert, da ich es so ähnlich wie du gelöst habe, deswegen habe ich es gleich geschlossen damit sich keiner weitere mühen macht.

Wenn man etwas zum laufen gebracht hat, will man das gleich anwenden, wollte ja auch noch den Code posten.... mach ich halt später und dann vergessen.

Sollte ich dir und euch irgendwie ein negatives empfinden hervorgerufen haben, entschuldige ich mich dafür und weiß eure Arbeit in diesem Forum zu Schätzen

Danke
Member: Pedant
Pedant May 31, 2018 at 11:05:31 (UTC)
Goto Top
Hallo dax4fun,

Zitat von @dax4fun:
Tut mir sehr leid, dass es so rübergekommen ist, war auch nicht meine Absicht.
es sei Dir verziehen.

Zitat von @dax4fun:
wollte ja auch noch den Code posten.... mach ich halt später
Später wäre beispielsweise jetzt.

Zitat von @dax4fun:
Wenn man etwas zum Laufen gebracht hat...
Ist damit alles erledigt, also auch Dein gefundener Code-Schnipsel?

Gruß Frank
Member: dax4fun
dax4fun May 31, 2018 updated at 12:21:04 (UTC)
Goto Top
Danke Frank,
$zahler=1;
foreach ($conn->query($sql) as $row) {
			
	if ($row['preis']<3) {$menge = rand(200, 400);}  
	if ($row['preis']>3 && $row['preis']<=20) {$menge = rand(20, 40);}  
	if ($row['preis']>20 && $row['preis']<=50) {$menge = rand(5, 10);}  
	if ($row['preis']>50) {$menge = 1;}	  
	
${'posten'.$zahler.'pos'} = 'Pos.'.$zahler;   //nur ein Teil  als Ergebniss bekomme ich die Variable $posten1pos = Pos.1  
 if ($zahler==$postenanzahl) {break;}
   $zahler++; 
}

Ja wunschlos glücklich ;)


Danke noch einmal