Top-Themen

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
GELÖST

ersten und letzten Wert eines Array ermitteln

Frage Entwicklung PHP

Mitglied: gechger

gechger (Level 1) - Jetzt verbinden

12.05.2009, aktualisiert 18:51 Uhr, 7397 Aufrufe, 4 Kommentare

Aus einer MYSQL Abfrage erhalte ich ein Array, möchte jetzt aber die ID des ersten und letzten Datensatzes ermitteln. Wie stelle ich das an?

Hallo Forum,

ein vorgegebenes php Script möchte ich erweitern. Ich möchte ein Abfrage einer MYSQL Datenbank durchführen, und die Datensatz ID des ersten und letzten Satzes des Arrays ermitteln und danach in eine Textdatei schreiben. Die bisherige Ausgabe sieht so aus:

Array
(
[0] => 1
[id] => 1
[1] => 2009-04-16_12:13:33 table=BB bTYP=10100 bLOG=1851 bDAT=2009-04-16_12:14:46 bIMP= bFLAG=0 bGPS=B,,,,, bTER= bPER=

[werte] => 2009-04-16_12:13:33 table=BB bTYP=10100 bLOG=1851 bDAT=2009-04-16_12:14:46 bIMP= bFLAG=0 bGPS=B,,,,, bTER= bPER=

[2] => 2009-04-16 12:13:33
[datum] => 2009-04-16 12:13:33
[3] => 7
[flag] => 7
)

1 2009-04-16_12:13:33 table=BB bTYP=10100 bLOG=1851 bDAT=2009-04-16_12:14:46 bIMP= bFLAG=0 bGPS=B,,,,, bTER= bPER=

Array
(
[0] => 2
[id] => 2
[1] => 2009-04-16_12:13:36 table=BB bTYP=10103 bLOG=1851 bDAT=2009-04-16_12:14:48 bIMP= bFLAG=0 bGPS=B,,,,; bTER= bPER=

[werte] => 2009-04-16_12:13:36 table=BB bTYP=10103 bLOG=1851 bDAT=2009-04-16_12:14:48 bIMP= bFLAG=0 bGPS=B,,,,; bTER= bPER=

[2] => 2009-04-16 12:13:36
[datum] => 2009-04-16 12:13:36
[3] => 7
[flag] => 7
)

2 2009-04-16_12:13:36 table=BB bTYP=10103 bLOG=1851 bDAT=2009-04-16_12:14:48 bIMP= bFLAG=0 bGPS=B,,,,; bTER= bPER=

Array
(
[0] => 3
[id] => 3
[1] => 2009-04-16_12:14:02 table=BB bTYP=10111 bLOG=1851 bDAT=2009-04-16_12:14:53 bIMP= bFLAG=0 bGPS=V,4935.4539,N,00606.5381,E, bTER=7118 bPER=00000

[werte] => 2009-04-16_12:14:02 table=BB bTYP=10111 bLOG=1851 bDAT=2009-04-16_12:14:53 bIMP= bFLAG=0 bGPS=V,4935.4539,N,00606.5381,E, bTER=7118 bPER=00000

[2] => 2009-04-16 12:14:02
[datum] => 2009-04-16 12:14:02
[3] => 7
[flag] => 7
)

3 2009-04-16_12:14:02 table=BB bTYP=10111 bLOG=1851 bDAT=2009-04-16_12:14:53 bIMP= bFLAG=0 bGPS=V,4935.4539,N,00606.5381,E, bTER=7118 bPER=00000

Ein Count Befehl liefert mir immer nur den Wert 8, weil pro Array 8 Zeilen ausgegeben werden. Wie kann ich also die ID Werte ermitteln, die in einer Abfrage ausgegeben werden?
Der relevante Teil des Scripts sieht so aus:
01.
$rcnt=0; 
02.
while ($row = mysql_fetch_array($result)) 
03.
04.
        echo "<pre>"
05.
        print_r($row); 
06.
        echo "</pre>"
07.
        //$count=array_count_values($row['werte']); 
08.
        // echo $count . "<br>"
09.
 
10.
       echo $row['id']." ".$row['werte']. "<br>"
11.
 
12.
 
13.
 
14.
        $ln=str_replace("\t",'|', $row['werte']); 
15.
        $ln=str_replace("\r",'|', $ln); 
16.
        $ln=str_replace("\n",'|', $ln); 
17.
        $data.=$ln."<br>"
18.
$rcnt++; 
19.
20.
if ($rcnt>0) 
21.
22.
        $edata=asc2hex($data); 
23.
        echo $edata
24.
25.
else 
26.
27.
        echo 'DATANODATA<br>'; 
28.
 
asc2hex ist eine Funktion zur Verschlüsselung der Daten. In den auskommentierten Zeilen habe ich mit verschiedenen Count Befehlen experimentiert. Bisher habe ich aber nicht den richtigen Ansatz gefunden.

Wie immer hilft jede Idee.

Vielen Dank für Eure Tips.
Schöne Grüße
Christof
Mitglied: dog
12.05.2009 um 22:57 Uhr
01.
<?php 
02.
 
03.
	function find_lowest_pair(&$array,$searchKey
04.
05.
		$lowKey = NULL; 
06.
		$lowVal = NULL; 
07.
		 
08.
		for ($i=0; $i < count($array); $i++) {  
09.
			$thisVal = &$array[$i][$searchKey]; 
10.
			if($lowKey === NULL || $thisVal < $lowVal) { 
11.
				$lowKey = $i
12.
				$lowVal = $thisVal
13.
14.
15.
		 
16.
		return $lowKey
17.
18.
 
19.
?>
Beispiel:
01.
<?php 
02.
 
03.
	$data = array
04.
			array('id' => 1,'c' => 10,'name' => 'a'), //0 
05.
			array('id' => 2,'c' => 7,'name' => 'b'),  //1 
06.
			array('id' => 3,'c' => 45,'name' => 'c'), //2 
07.
			array('id' => 4,'c' => 791,'name' => 'd') //3 
08.
		); 
09.
		 
10.
	var_dump(find_lowest_pair($data,'c')); 
11.
 
12.
?>
Ergebnis:
int(1)
...nur mal so als Beispiel

Grüße

Max
Bitte warten ..
Mitglied: gechger
13.05.2009 um 17:26 Uhr
Hallo Max,

leider habe ich mit function noch keine Berührung gehabt, deshalb mal einige Fragen dazu:

Wo muß die function eingebaut werden? In der while Schleife oder davor?

Die Variable $array, muß diese ersetzt werden durch mein Array $row? Und warum steht manchmal ein & vor der Variablen?

Was besagt hier
var_dump(find_lowest_pair($data,'c'));
das 'c' ? Entspricht das dem Wert (in meinem Beispiel [werte]?

Ich habe zwar in Tutorials mal nachgeschlagen, aber richtig verstehe tue ich das noch nicht.

Schöne Grüße
Christof
Bitte warten ..
Mitglied: dog
13.05.2009 um 18:33 Uhr
leider habe ich mit function noch keine Berührung gehabt, deshalb mal einige Fragen dazu:

Du arbeitest schon die ganze Zeit mit Funktionen, nur dass sie bereits in PHP schon vorgegeben sind.
Natürlich kann man sie auch selber schreiben.

Vielleicht verstehst du es besser, wenn du dich mal an den Matheunterricht erinnerst:
f(a,b) := a * b
So sähe prinzipiell eine Funktion aus, um die Fläche eines Rechtsecks zu berechnen.
Das lässt sich jetzt direkt anwenden:
f(2,3) = 6
Genauso könnte ich aber meine 2 und 3 auch als Variablen definieren, und diese einsetzen:
u = 2 
v = 3 
f(u,v) = 6
Das Ergebnis ist das selbe.
Du musst dir also merken:
Es ist nicht wichtig, wie die Variablen heißen, die einer Funktion übergeben werden, sondern lediglich in welcher Reihenfolge.
Eine Funktion ist ein eigenes kleines "Universum" und die Parameter (hier: a und b) sind die einzige Möglichkeit, wie der Inhalt der Funktion mit seiner Außenwelt kommunizieren kann.

Auf PHP übertragen bedeutet das:
01.
function f($a,$b) { 
02.
  return ($a * $b); 
03.
}
Die Bedeutung ist absolut identisch zur mathematischen Formel oben, lediglich kommt hier das "return" hinzu, was soviel bedeutet wie "Verwende das, als Ergebnis der Funktion" - in der Mathematik hätten wir das einfach vorausgesetzt.

Wo muß die function eingebaut werden? In der while Schleife oder davor?

Funktionenen werden normalerweise in eine eigene Datei functions.inc.php o.Ä. gepackt, die dann per include() am Anfang des Scripts eingebunden wird.
Wichtig ist, dass du deine Funktionen immer als einen selbstständigen Code betrachtest - ihre Definition hat im normalen Programmablauf nichts zu suchen, darum sollten Funktionsdefinitionen immer vor allem anderen kommen.

Die Variable $array, muß diese ersetzt werden durch mein Array $row?

Nein, wie oben erklärt ist $array lediglich innerhalb der Funktion die Variable mit dem der erste übergebene Wert angesprochen wird.
Die Funktion ist abgeschlossen, sie muss nicht mehr geändert werden.
Ob du nun
01.
find_lowest_pair($data,'c'); 
02.
find_lowest_pair($array,'c'); 
03.
find_lowest_pair($keks,'c');
schreibst, ist für den inneren Ablauf der Funktion unbedeutend - natürlich nur solange $data, $array und $keks auf die selben Daten verweisen.

Und warum steht manchmal ein & vor der Variablen?

Das &-Zeichen steht für Pass-By-Reference.
Als Beispiel folgender Code:
01.
$a = "Hallo"
02.
$b = $a;
Am Ende dieses Codes hast du zwei Variablen, die beide "Hallo" enthalten.
Bei der Zuweisung $b = $a wurde der Wert von $a nach $b kopiert.
Dein Speicherverbrauch ist also jetzt 2 * (länge(Hallo)) = 10 B.

Verwendet man hingegen folgenden Code:
01.
$a = "Hallo"
02.
$b = &$a;
Dann ist $b lediglich ein Verweis auf $a - du kannst es dir wie eine Verknüpfung vorstellen.
$b und $a verweisen jetzt auf ein uns das selbe "Hallo".
Wenn du jetzt
01.
$b = "Keks";
schreibst, dann hast du $a damit auch gleich mitgeändert, was normalerweise nicht passiert.
Dein Speicherverbrauch ist hier nur 1 * länge(Hallo) = 5.

Ausnahme bei dieser Regel sind Objekte: Sie verhalten sich immer wie zweiterer Typ, außer man kopiert sie explizit - aber das nur für später

Was besagt hier
var_dump(find_lowest_pair($data,'c'));
das 'c' ? Entspricht das dem Wert (in meinem Beispiel [werte]?

var_dump() ist eine Funktion, mit der du Variablen oder die Ergebnisse anderer Funktionen inspizieren kannst.
Ich hätte auch "echo ..." schreiben können, var_dump() liefert aber mehr Informationen.

'c' ist, wie du an meinem Beispiel siehst der Schlüssel, der auf den niedrigsten Wert verglichen werden soll.

Wenn du also einen Array hast, in dem sich mehrere Arrays mit verschiedenen Spalten befinden und du möchtest wissen, welcher dieser inneren Arrays den niedrigsten Wert für den Schlüssel x hat gibst du
01.
$lowNum = find_lowest_pair($data,'x');
ein.

Beachte, dass diese Funktion so nicht in while()-Schleifen funktioniert, weil sie zwei ineinander verschachtelte Arrays benötigt. Bei
01.
while($a = mysql_fetch_assoc($query)) {
Hast du in $a aber immer nur einen einfachen Array.

Deine Beispieldaten sind allerdings relativ undurchsichtig, vielleicht reden wir auch aneinander vorbei...

Grüße

Max
Bitte warten ..
Mitglied: gechger
14.05.2009 um 12:54 Uhr
Hallo Max,

habs jetzt mit einem kleinen array-push gelöst:

01.
$daten=array(); 
02.
while ($row = mysql_fetch_array($result)) 
03.
04.
         $resultat = array_push($daten,$row); 
05.
 
06.
        $ln=str_replace("\t",'|', $row['werte']); 
07.
        $ln=str_replace("\r",'|', $ln); 
08.
        $ln=str_replace("\n",'|', $ln); 
09.
        $data.=$ln."<br>"
10.
$rcnt++; 
11.
12.
 
13.
         echo "<pre>"
14.
         print_r ($daten[0][id]); 
15.
         echo "<br>"
16.
         print_r ($daten[$resultat-1][id]); 
17.
         echo "</pre>";
In ($daten[0][id]); steht jetzt die ID des ersten Datensatzes, in ($daten[$resultat-1][id]) steht der letzte Datensatz des Arrays.

Aber vielen Dank für Deine Mühe.

Schöne Grüße
Christof
Bitte warten ..
Ähnliche Inhalte
Windows Tools
Powershell: Aus String die letzten Werte ermitteln
Frage von ColoneltwWindows Tools3 Kommentare

Hallo liebe Foristen, ich sitze an einem kleinen Powershell Problem. Ich habe einen UNC Pfad und möchte das letzte ...

Batch & Shell
Leere Array-Werte aus einem Array entfernen
gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

Batch & Shell
Wert aus Array ausschliessen PowerShell
gelöst Frage von ivaylo53Batch & Shell2 Kommentare

Guten Morgen Community, irgendiwe komme ich bei diesem Problem nicht weiter. Ich habe Zwei Objekte $alCSVUser und $alADUser. Diese ...

Batch & Shell
PowerShell Wert in Array finden
gelöst Frage von derhoeppiBatch & Shell7 Kommentare

Hallo, in meinem Projekt lese ich einen Eintrag aus einer Combobox aus. Dieser wird in eine Variable / Objekt ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement16 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...