Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 2546 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Microsoft Office
Access ein Script alle X Minuten ausführen und bei Bedarf stoppen (5)

Frage von thomas1972 zum Thema Microsoft Office ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...