Array filtern und zutreffende zurückschreiben ?

sid61

Mitglied
Hallo,
nun habe ich ein Problem lösen können, aber leider ergibt sich daraus wieder ein neues Problem. Ich habe Daten ausgelesen, die serialisiert waren. Nun stehen Sie korrekt in einem Array. Aber leider auch die, die ich nicht benötige.

Nun meine Frage :

kann ich das irgendwie so lösen, das ich nach dem Einlesen aus der Datenbank eine Sortierung anwende und nur die zutreffenden Daten in ein neues Array kopiere ?

Folgenden Ansatz hatte ich mal probiert, bin aber hemmungslos gescheitert..

PHP:
 mysql_query( "SET NAMES 'utf8'" );
    $sql = "SELECT field_value, record_id FROM mydb.jos_js_res_record_values j WHERE j.`field_id`=8";
    $result = mysql_query($sql) or DBError("LINE: " .__LINE__. " $sql");
  
        if ($result) {
        while ($str = mysql_fetch_array($result)) {
            
            $ergebnis=(unserialize($str['field_value']));
            $ergebnis[record_id]=($str['record_id']);
            $ergebnis[type]=$markertyp;

            //print_r(unserialize($str['field_value']));
            print_r($ergebnis);

//// Ab hier möchte ich die eingelesenen Daten aussortieren, nach den Kriterien, welcher Inhalt auf der GMap derzeit zu sehen ist. (Eingrenzung der Sicht)
Ursprünglich war es so gelöst
///////////////////////////////////////////////////////
 WHERE
      (lon > $swlng AND lon < $nelng)
      AND (lat <= $nelat AND lat >= $swlat) ORDER by lon
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// nachfolgend mein Ansatz, der aber nicht funktioniert :-(

        if (($ergebnis[lon]) > ($swlng) && ($ergebnis[lon]) < ($nelng) && ($ergebnis[lat] <= ($nelat) && ($ergebnis[lat]) >= ($swlat)) {
         // trifft zu, kopiere in neues Array list
         }else{
         // trifft nicht zu, schmeiss weg...

Wie kann ich das lösen, bzw. wie müßte ich die Abfrage anders konstruieren, das es funktioniert ?

Kann jemand helfen ?

Liebe Grüße
Kasimir
 
Hi,
dazu bräuchte - ich zumindest - noch ein paar Infos

1) warum hast du die WHERE Klausel entfernt
2) warum gibt die IF Abfrage nichts aus? Versuche einfach eine Bedingung nach der anderen hinzu zu fügen, dann siehst du bei welcher Bedingung die Ausgabe verschwindet
3) Es gibt die PHP Funktion array_walk() welche du anwenden kannst.

gruß
Markus
 
Hi,
dazu bräuchte - ich zumindest - noch ein paar Infos

1) warum hast du die WHERE Klausel entfernt
2) warum gibt die IF Abfrage nichts aus? Versuche einfach eine Bedingung nach der anderen hinzu zu fügen, dann siehst du bei welcher Bedingung die Ausgabe verschwindet
3) Es gibt die PHP Funktion array_walk() welche du anwenden kannst.

gruß
Markus

Hallo Homer / Markus

Die where Klausel stammt noch aus einer ABfrage, bevor ich das System gewechselt hatte. Dort waren die lat und lon Felder einzeln in der Tabelle enthalten. Jetzt habe ich das Problem, das im neuen System die Daten lat und lon serialisiert gespeichert sind.

Mit der Abfrage, die ich hier habe, lade ich dann leider alle Datensätze, weil ich nicht weiß, wie ich während der Abfrage die serialisierten Daten auslesen kann.
Ich kann Sie ja erst lesen, wenn Sie mit unserialize im Array stehen.
Meine Idee war diese, das ich - wenn ich dann das Array habe, diese Daten mittels einer Abfrage überprüfe, welche Daten überhaupt zutreffend sind und diese dann in ein anderes Array vor der Ausgabe kopiere.

Ich vermute mal, das dies eine unbefriedigende Lösung darstellt, da ich ja bei ganz vielen Markern die doppelte Zeit brauche, aber mir fällt nichts besseres ein, weil ich zu wenig Ahnung habe :-)

Aber zurück zum Prob...
Bei der Verwendung von
PHP:
if (($ergebnis[lon]) > ($swlng) && ($ergebnis[lon]) < ($nelng) && ($ergebnis[lat] <= ($nelat) && ($ergebnis[lat]) >= ($swlat)) {
         // trifft zu, kopiere in neues Array list
         }else{
         // trifft nicht zu, schmeiss weg...
}

bekomme ich einen Fehler angezeigt :
Parse error: syntax error, unexpected '
und er moniert die erste Klammer hinter meiner if Anweisung.


array_walk() sagt mir erst mal überhaupt nichts..
muss ich mich erst belesen...

Gruss
Sven

P.S.
Kann man denn die Abfrage so verändern, das ich die serialisierten Daten nicht alle zuerst herunterladen muss, bevor ich nach lat und lon unterscheide ?
 
Zurück