Flashhilfe.de - Flash Community

Array mit Tripeln auswerten

 


AntwortenRegistrieren Seite1  

JunO#1
Benutzerbild von JunO
Beiträge: 3
Registriert: Aug 2008

01.08.2008, 22:14

Guten Abend,

ich habe folgendes Problem:

in einem Array liegen Elemente in folgender Form vor:
array(A1,B1,C1,A2,B2,C2,A3,B3,C3,A4,....An,Bn,Cn)

Dieses Array möchte ich so auswerten, dass ich die einzelnen Elemente in eine mysql-Tabelle einfügen kann, die schließlich so aussehen soll:

A    |    B    |    C
----------------------
A1  |    B1  |    C1
A2  |    B2  |    C2
A3  |    B3  |    C3
A4  |    B4  |    C4
  :  |      :  |      :
An  |    Bn  |    Cn

Ich komme nicht auf eine zündende Idee, wie ich das anstellen könnte. Weiss jemand hier Rat?

Vielen Dank schon im Voraus
JunO
Werbung
Beiträge: 0
Registriert: Feb 2016


Sebastian#2
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

02.08.2008, 13:04

Hm.

So in der Art:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$ary 
= array(A1,B1,C1,A2,B2,C2,A3,B3,C3,A4,....An,Bn,Cn);

foreach(
$ary as $item)
{
    if(
preg_match('=^([a-z]+)[0-9]+$=iU',$item$rs))
    {
       
$sql 'INSERT INTO tabelle SET ' $rs[1] . ' = ' $item;
       
mysql_query($sql);
    }
}
?>

Falls die Tabelle noch nicht existiert ist es auch kein Problem sie vorher noch anzulegen. Im Notfall einfach eine Schleife davor und dann im if des preg_matchs $rs[1] in einem Array unique speichern, nach der Schleife kannst Du dann die Tabelle erstellen.

Wenn Du viele Datensätze hast, solltest Du Dich noch mal umsehen ob es da nicht noch eine schnellere INSERT Variante gibt. Glaube man kann auch mehrere Datensätze auf einmal, also in einem Query an die DB senden.
Wenn Du keine Rückmeldung von INSERT Statement brauchst, kannst Du auch noch:
PHP:
1
2
3
4
<?
mysql_unbuffered_query
($sql);
?>
einsetzen.
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
BackToDos#3
Benutzerbild von BackToDos
Beiträge: 571
Wohnort: LE
Registriert: Apr 2006

02.08.2008, 14:45

hmm,
also mit array_chunk kommt man recht bequem an's ziel ...
und ich würde eher ein großes insert absetzen.
das sieht dann etwa so aus (nicht ausprobiert)
PHP:
1
2
3
4
5
6
7
8
<?
$arr 
= array(A1,B1,C1,A2,B2,C2,A3,B3,C3,A4,B4,C4);
$rows = array();
foreach (
array_chunk($arr,3) as $chunk
     
$rows[] = "(".implode(",",$chunk).")";
mysql_query("INSERT INTO table (a,b,c) VALUES ".implode(",",$rows));
?>
greetz
back2dos
Sebastian#4
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

02.08.2008, 22:04

.... wird so nicht gehen, da es zu jedem Buchstaben mehr als einen Wert gibt, aber ist so auch schon deutlich performanter als alles einzeln zu machen. Bin dazu erst mal nicht weiter eingegangen da bekanntlich viele Wege nach Rom führen und ohne genau Kenntnisse über das Ziel wird es eine ziemliche umherirre`rei ;)
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
Werbung
Beiträge: 0
Registriert: Feb 2016


JunO#5
Benutzerbild von JunO
Beiträge: 3
Registriert: Aug 2008

Themenautor/in

03.08.2008, 06:21

Hallo

vielen Dank für Eure Hilfe. Ich denke ich muss das Problem konkretisieren.

Ich bearbeite mit meinem Skript Geodaten, also z. B. kml-Dateien, wie Sie mir von GPS-Geräten ausgegeben werden. Ich bin soweit, dass ich aus diesen Dateien den Koordinatenteil extrahiert habe. Dieser liegt nun in einem Array von Zahlenwerten vor. Mein (wohl verwirrendes) Beispiel sollte zeigen, dass immer drei Werte zusammen gehören, es ging also nicht um die Buchstaben. Ich gebe jetzt mal ein einfaches Beispiel (wobei ich aber die Dezimalkommastellen aus Platzgründen reduziert habe):

new_kml_array(9.12,51.34,154,2,9.95,50,87,149,4)

Das wären jetzt die Daten für zwei Standorte, wobei die erste Zahl die Länge (lon), die zweite die Breite (lat) und die dritte die Meereshöhe (alt) angibt.  Die vierte Zahl ist dann wieder eine Längenangabe, etc.

In der Datenbank existiert eine Tabelle "mtb_test" mit den Feldern "lon", "lat" und "alt" und ich will jetzt die Daten so verarbeiten, dass dieses Ergebnis erreicht wird:

lon  |  lat  |  alt
-----------------------
9.12 |51.34 |154,2
9.95 |50,87 |149,4

Der Ansatz mit array_chunk gefällt mir gut, aber ich bin noch so unbedarft, dass ich es noch nicht so richtig hin bekomme.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$tripel 
= array(); 
foreach (
array_chunk($new_kml_array,3) as $chunk
     
$tripel[] = "(".implode(",",$chunk).")";
foreach (
$tripel as $key => $val)
    {
   
$chunk $val;
foreach (
$chunk as $key => $val)
    {
   
$lon $chunk[0];
   
$lat $chunk[1];
   
$alt $chunk[2];
mysql_query("INSERT INTO mtb_test (lon,lat,alt) VALUES ( '$lon' , '$lat' , '$alt' )");
    }
    }
?>


Ich muss hier wohl nochmal mit implode an die Daten, da die Datenbank nur zeichenweise gefüllt wird.

Vermute ich richtig? Übersehe ich noch was? Hat mein konkretes Beispiel Klarheit gebracht?

Gruss JunO
Geändert von JunO am 03.08.08 um 08:35 Uhr
Sebastian#6
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

03.08.2008, 09:58

So sieht das schon anders aus.

Denke so in der Richtung könnte man das lösen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$new_kml_array 
= array(9.12,51.34,154,2,9.95,50,87,149,4);
$num count($new_kml_array);

for(
$i=0;$i<$num;i+=3)
{
   
$lon $i;
   
$lat $i 1;
   
$alt $i 2;
   
mysql_query("INSERT INTO mtb_test (lon,lat,alt) VALUES ( '$lon' , '$lat' , '$alt' )");
}
?>
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
JunO#7
Benutzerbild von JunO
Beiträge: 3
Registriert: Aug 2008

Themenautor/in

03.08.2008, 10:07

Hallo zusammen

jetzt hat's geklappt. Hier meine Lösung:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
$geo 
=array();
foreach( 
array_chunk($new_kml_array,3) as $tp => $geo )

   
$lon $geo[0];
   
$lat $geo[1];
   
$alt $geo[2]; 
        echo 
"Trackpoint: Nr. $tp, L&auml;nge: $lon ,Breite: $lat, H&ouml;he: $alt<br>";
       
mysql_query("INSERT INTO mtb_test (lon,lat,alt,tp) VALUES ( '$lon' , '$lat' , '$alt' , '$tp' )");
}
?>


Das echo ist nur drin, um zu sehen, was rauskommt. Ich kann nicht beurteillen, ob das jetzt elegant ist und wie ein "großes insert" aussieht und wirkt. Fakt ist, dass die knapp 900 Datensätze in meinem Beispiel eher eine kleine Menge sind.  Bei den Kontrollen in phpMyAdmin sehe ich die Dauer bestimmter Queries. Ab welcher Dauer wird es denn kritisch?

Und jetzt noch vielen, vielen Dank, Ihr habt mir beim Lernen sehr weiter geholfen.

Gruss, JunO
Sebastian#8
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

05.08.2008, 00:23

>> Ab welcher Dauer wird es denn kritisch?
Das kann man nicht allgemein beantworten da es immer auf die Daten abfrage und den Anwendungsort ankommt.
Abgesehen davon hat die Frage nichts mit dem eigentlichen Thema zu tun. Deswegen schließe ich mal hier. Erstell doch bitte ein neuen Thread wenn Du weitere Fragen hast.
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de