Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Array bei Bedarf Auffüllen

Frage Entwicklung PHP

Mitglied: chb1982

chb1982 (Level 2) - Jetzt verbinden

29.10.2008, aktualisiert 02.11.2008, 2575 Aufrufe, 1 Kommentar

Moin,

ich hoffe hier nimmt sich jemand die Zet sich meinem Problem anzunehmen.
Unten ist ein kleines Script, das die Ausgabe von mehreren Spalten in eine Zusammenfasst.
In der Ausgangsdatei sind x Datensätze pro Auftragsnummer ($arKomPos[8]) und zwar so viele wie es Satzarten gibt ($arKomPos[33])

Die Ursprungstabelle sieht vereinfacht so aus:

Nummer - Satzart - Wert EK - Wert VK
4711 - 101 - 109,20 - 240, 30
4711 - 105 - 209,20 - 240, 30
4711 - 110 - 309,20 - 240, 30

4712 - 104 - 109,20 - 240, 30
4712 - 110 - 209,20 - 240, 30
4712 - 130 - 309,20 - 240, 30

Ziel soll sein jede Auftragsnummer in eine Zeile zu packen. Also

4711 - 101 - 109,20 - 105 - 209,20 - 110 - 309,20

Das bekommt das Script auch ganz toll hin.

Und jetzt kommt der Punkt.
Es gibt die Satzarten von 101 bis 130 durchgehend, aber sie werden nicht immer verwendet. Wenn sie nicht verwendet werden, sollen die Spalten mit 0 ausgegeben werden. Und das bekomme ich einfach nicht hin.

Anhand des Beispiels soll es also so aussehen.

4711 - 101 - 109,20 - 102 - 0 - 103 - 0 - 104 - 0 - 105 - 209,20


Kann mir jemand auf die Sprünge helfen wie ich das hinbekomme? Ich stehe schon am Rand der Verzweiflung!

Gruß
Christoph

Hier nun der Code

<?php
function convert_KomPos ($filename){
$last_kom = 0; Hilfsvariable Gruppenwechsel
$first_run = 1;
Satzarten
100, 101, 102, 103, 104, 110, 120, 121, 122, 124, 130, 131, 140

$x=1;

$fp=fopen("$filename","r");
$arKomSum=array();
while($arKomPos = fgetcsv($fp,8000,",")) {

$arKomSum[$arKomPos[8]][$arKomPos[33]][KomNr] = $arKomPos[8];
$arKomSum[$arKomPos[8]][$arKomPos[33]][KomSArt] = $arKomPos[33];
$arKomSum[$arKomPos[8]][$arKomPos[33]][KomEk.$arKomPos[33]] = $arKomPos[34] + $arKomSum[$arKomPos[8]][$arKomPos[33]][KomEk.$arKomPos[33]];
$arKomSum[$arKomPos[8]][$arKomPos[33]][KomVk.$arKomPos[33]] = $arKomPos[35] + $arKomSum[$arKomPos[8]][$arKomPos[33]][KomVk.$arKomPos[33]];
for($x=0;$x<33;$x++) {
$arKomSum[$arKomPos[8]][$arKomPos[33]][$x] = $arKomPos[$x];
}


}

$fp_write=fopen("kompos_hor.csv","w");

foreach($arKomSum as $temp1) {
Jede Kommissionsnummer
asort($temp1);
foreach($temp1 as $temp) { Jede Satzart
if($last_kom != $temp[KomNr]) {
for($x=0;$x<33;$x++) {
echo " - " . $temp[$x] . " ";
fwrite($fp_write, $temp[$x] . ",");
}
echo " KommNr:" . $temp[KomNr] . " SArt:" .$temp[KomSArt] . " EK:" . $temp[KomEk.$temp[KomSArt]] . " VK:" .$temp[KomVk.$temp[KomSArt]];
fwrite($fp_write, $temp[KomNr] ."," . $temp[KomSArt] . "," . $temp[KomEk] . "," . $temp[KomVk].",");
$last_kom = $temp[KomNr];
}
else {
echo " SArt:" .$temp[KomSArt] . " EK:" . $temp[KomEk.$temp[KomSArt]] . " VK:" .$temp[KomVk.$temp[KomSArt]];
fwrite($fp_write, $temp[KomSArt] . "," . $temp[KomEk] . "," . $temp[KomVk] . ",");
$last_kom = $temp[KomNr];
}
}
echo "<br><br>";
fwrite($fp_write, "\n");
}
fclose($fp_write);


}
?>
Mitglied: Guenni
02.11.2008 um 12:47 Uhr
Hi Christoph,

ehrlich gesagt, blicke ich durch dein Script nicht durch, zumal du noch
eine Funktion convert_KomPos definiert hast, die aber im Script
nirgends aufgerufen wird :-O.
Hab' das Problem (hoffentlich) mal wie folgt gelöst.

01.
<? 
02.
/* 
03.
Datei auftrag.txt zeilenweise einlesen, Beispiel: 
04.
4711-101-109,20-240,30 
05.
4711-105-209,20-240,30 
06.
4711-110-309,20-240,30 
07.
4712-104-109,20-240,30 
08.
4712-110-209,20-240,30 
09.
4712-130-309,20-240,30 
10.
4713-101-23,90-35,90 
11.
4713-110-101,90-139,90 
12.
4810-103-120,90-155,70 
13.
Hinweis: KEINE LEERZEILEN ZWISCHEN DEN AUFTRÄGEN 
14.
*/ 
15.
$handle=fopen("auftrag.txt","r"); 
16.
while($line=fgets($handle)){ 
17.
 $lines[]=$line
18.
19.
fclose($handle); 
20.
/* 
21.
Jede Zeile als Array in einem Array ablegen 
22.
Die Elemente der Arrays können dann mit Hilfe 
23.
der folgenden Konstanten angesprochen werden 
24.
z.B.: array[index][SATZ]; array[index][EK] etc. 
25.
*/ 
26.
foreach($lines as $line){ 
27.
 $arr[]=explode("-",$line); 
28.
29.
/* 
30.
Einige Konstanten, um die Indexe der Arrays anzusprechen 
31.
*/ 
32.
define('AUFTRAG',0); 
33.
define('SATZ',1); 
34.
define('EK',2); 
35.
define('VK',3); 
36.
/* 
37.
Die Auftragsnummern in ein Array ablegen und doppelte 
38.
Auftragsnummern entfernen 
39.
*/ 
40.
foreach($arr as $el){ 
41.
 $nr[]=$el[AUFTRAG]; 
42.
43.
$nr=array_unique($nr); 
44.
/* 
45.
Es existiert nun ein Array mit einmaligen Auftragsnummern 
46.
Die Arrays im Array $arr können nun mit den Auftragsnummern 
47.
angesprochen werden, die Elemente der Arrays mit den Konstanten 
48.
*/ 
49.
$i=0; 
50.
foreach($nr as $el){ 
51.
 $j=101; 
52.
 $auftrag="AuftragsNr: ".$el
53.
 while($arr[$i][AUFTRAG]==$el){ 
54.
  while($j<131){ 
55.
		/* 
56.
		Wenn die SatzNr eines Arrays $j entspricht, werden SatzNr und EK an 
57.
		$auftrag angehangen. $i wird um 1 erhöht, um das nächste Array zu prüfen 
58.
		$j wird nicht verändert, da ja jedes Array eine eigene SatzNr hat. 
59.
		Innerhalb dieser Schleife wird also $j durchgezählt bis 130, $i aber nur solange 
60.
		die Bed. $arr[$i][AUFTRAG]==$el zutrifft. 
61.
		*/ 
62.
    if($arr[$i][SATZ]==$j){ 
63.
		 $auftrag.="-".$arr[$i][SATZ]."-".$arr[$i][EK]; 
64.
		 $i++; 
65.
		}else
66.
					//$auftrag.="-".$j."-0"
67.
					/* 
68.
					Zur Abkürzung der Zeile wird hier nur die Null ohne SatzNr angehangen 
69.
					*/ 
70.
					$auftrag.="-0"
71.
72.
		$j++; 
73.
74.
75.
 /* 
76.
 Auftragszeile mit Zeilenende in ein Array ablegen 
77.
 */ 
78.
 $auftraege[]=$auftrag."\n"
79.
80.
echo "Testausgabe der Auftragszeilen<pre>"
81.
print_r($auftraege); 
82.
echo "</pre>"
83.
/* 
84.
Auftraege in Datei schreiben 
85.
*/ 
86.
$handle=fopen("pub/auftrag.txt","w"); 
87.
foreach($auftraege as $auftrag){ 
88.
 fwrite($handle,$auftrag); 
89.
90.
fclose($handle); 
91.
?>
Gruß
Günni
Bitte warten ..
Ähnliche Inhalte
PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

PHP
gelöst PHP - unique-array() und sort() (14)

Frage von ThomasXYZ zum Thema PHP ...

Datenbanken
Mongodb Daten aus Array auslesen (1)

Frage von Baanause zum Thema Datenbanken ...

Basic
gelöst AutoIt - Array auslesen und den Inhalt der Dateien in Worddatei einfügen (4)

Frage von hipfzwirgel zum Thema Basic ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Gebäude mit WLAN ausstatten (9)

Frage von udobec zum Thema LAN, WAN, Wireless ...