ersten und letzten Wert eines Array ermitteln
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
(
=> 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
(
=> 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
(
=> 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:
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
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
(
=> 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
(
=> 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
(
=> 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:
$rcnt=0;
while ($row = mysql_fetch_array($result))
{
echo "<pre>";
print_r($row);
echo "</pre>";
//$count=array_count_values($row['werte']);
// echo $count . "<br>";
echo $row['id']." ".$row['werte']. "<br>";
$ln=str_replace("\t",'|', $row['werte']);
$ln=str_replace("\r",'|', $ln);
$ln=str_replace("\n",'|', $ln);
$data.=$ln."<br>";
$rcnt++;
}
if ($rcnt>0)
{
$edata=asc2hex($data);
echo $edata;
}
else
{
echo 'DATANODATA<br>';
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 115919
Url: https://administrator.de/contentid/115919
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
<?php
function find_lowest_pair(&$array,$searchKey)
{
$lowKey = NULL;
$lowVal = NULL;
for ($i=0; $i < count($array); $i++) {
$thisVal = &$array[$i][$searchKey];
if($lowKey === NULL || $thisVal < $lowVal) {
$lowKey = $i;
$lowVal = $thisVal;
}
}
return $lowKey;
}
?>
Beispiel:
<?php
$data = array(
array('id' => 1,'c' => 10,'name' => 'a'), //0
array('id' => 2,'c' => 7,'name' => 'b'), //1
array('id' => 3,'c' => 45,'name' => 'c'), //2
array('id' => 4,'c' => 791,'name' => 'd') //3
);
var_dump(find_lowest_pair($data,'c'));
?>
Ergebnis:
int(1)
...nur mal so als Beispiel
Grüße
Max
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:
function f($a,$b) {
return ($a * $b);
}
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
find_lowest_pair($data,'c');
find_lowest_pair($array,'c');
find_lowest_pair($keks,'c');
Und warum steht manchmal ein & vor der Variablen?
Das &-Zeichen steht für Pass-By-Reference.
Als Beispiel folgender Code:
$a = "Hallo";
$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:
$a = "Hallo";
$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
$b = "Keks";
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(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
$lowNum = find_lowest_pair($data,'x');
Beachte, dass diese Funktion so nicht in while()-Schleifen funktioniert, weil sie zwei ineinander verschachtelte Arrays benötigt. Bei
while($a = mysql_fetch_assoc($query)) {
Deine Beispieldaten sind allerdings relativ undurchsichtig, vielleicht reden wir auch aneinander vorbei...
Grüße
Max