php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.12.2008, 11:06  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
JeKyll befindet sich auf einem aufstrebenden Ast
Standard Array ist nicht gleich Array oder was?

Hallo zusammen
Ich hoffe ihr konnt mir weiterhelfen, ich bin mittlerweile an dem Punkt angekommen, an welchem ich anfange, an mir zu

zweifeln, was das Programmieren angeht.

Zuerst einmal die Umgebungsdetails:
  • Apache/2.0.59 (Unix) PHP/4.4.4
  • PHP 4.4.4 (5 kommt momentan nicht in Frage, für diverse Applikationen müssen 100e Scripts umgeschrieben werden)
  • Oracle 10.2.0.3

Ich muss für im Betrieb ein Script machen, welches den Bestand einer Tabelle in der Oracle-Datenbank abfragt und mit einem

importierten txt-File vergleicht. Nach diesem Vergleich kommen entweder INSERT-, UPDATE- oder DELETE-Befehle, um die DB zu

aktualisieren.

Folgendes habe ich bereits erarbeitet:

PHP-Code:
<?php
function printr($array)
{
    print 
"<pre>";
    
print_r($array);
    print 
"</pre>";
}

// erster array: neue daten
$txtfile file("data.txt");
$txt = array();
for(
$i 0$count sizeof($txtfile); $i $count; ++$i)
{
    
$txt[$i] = explode(";"$txtfile[$i]);
    
trim($txt[$i]);
}

$txtarr = array();
for(
$i 0$i $count; ++$i)
{
    
$txtarr[$i] = $txt[$i][1];
}

for(
$i 0$i $count; ++$i)
{
    if(empty(
$txtarr[$i]))
    {
        
//Debugging Ausgabe
        
print "Found an empty value: Array Key #".$i;
        print 
"<br>";
        unset(
$txtarr[$i]);
    }
}
sort($txtarr);

// zweiter array: bestehende daten
$sql "SELECT irgendwas FROM irgendwo WHERE irgendwas='irgendwo'";

$oraarr = array();
$i 0;
$rs $dbc->Execute($sql);

while(!
$rs->EOF)
{
    
$oraarr[$i] = $rs->Fields("irgendwas");
    
trim($oraarr[$i]);
    ++
$i;
    
$rs->MoveNext();
}
sort($oraarr);

//Debugging Ausgabe
printr($txtarr);
print 
"<br><br>";
printr($oraarr);
print 
"<br><br>";
?>
Das gibt folgendes aus:

PHP-Code:
<?php
//Textfile

Array
(
    [
0] => DATEN 1

    
[1] => DATEN 2

    
[2] => DATEN 3

    
[3] => DATEN 4

    
[4] => DATEN 11
)

//Oracle DB

Array
(
    [
0] => DATEN 1
    
[1] => DATEN 2
    
[2] => DATEN 3
    
[3] => DATEN 4
    
[4] => DATEN 5
)
?>
Wenn ich diese Arrays beispielsweise nun mit einem array_diff vergleichen will, erhalte ich immer alle Daten zurück anstelle

nur den Daten, welche sich unterscheiden.

Ich habe es nun schon soweit getrieben, dass ich eine riesige Schlaufe geschrieben habe, um alle Werte manuell zu

vergleichen, was so aussieht:

PHP-Code:
<?php
foreach($txtarr as $key => $value)
{
    for(
$i 0$count sizeof($oraarr); $i $count; ++$i)
    {
        if(
$value == $oraarr[$i])
        {
            print 
"[".$key."][".$i."] ist gleich -> Update!<br>";
            if(
$value === $oraarr[$i])
            {
                print 
"[".$key."][".$i."] ist identisch -> Update!<br>";
            }
        }
        elseif(
$value != $oraarr[$i])
        {
            print 
"[".$key."][".$i."] ist nicht gleich:<br>File: ".$value."<br>DB: ".$oraarr[$i]."<br>";
        }
        print 
"<br>";
    }
}
?>
Dies ergibt folgende Ausgaben:

PHP-Code:
<?php
[0][0ist nicht gleich:
FileDATEN 1 
DB
DATEN 1

[0][1ist nicht gleich:
FileDATEN 1 
DB
DATEN 2

[0][2ist nicht gleich:
FileDATEN 1 
DB
DATEN 3

[0][3ist nicht gleich:
FileDATEN 1 
DB
DATEN 4

[0][4ist nicht gleich:
FileDATEN 1 
DB
DATEN 5

//etc
?>
Also halten wir nun fest: "DATEN 1" != "DATEN 1".

Nach langem suchen habe ich nun festgestellt, dass $txtarr hinter jeden value ein " " Leerzeichen macht, welches ich aber trotz trim() oder rtrim() resp. rtrim($txtarr, " ") nicht wegbekomme.

Ich komme nun einfach nicht mehr weiter, kann ich noch was ausprobieren oder kennt hier jemand gerade die Lösung?

Vielen Dank für eure Mühen!
Gruss JeK
JeKyll ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.12.2008, 11:09  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

beschäftige Dich noch mal mit den Array-Grundlagen:
Quakenet/#php Tutorial - de - Arrays

und benutze foreach - ist ne feine Sache.

Zitat:
eine riesige Schlaufe
Schlaufen gibt es an den Schuhen oder beim Henker
aber nicht bei PHP.
Koala ist offline  
Alt 02.12.2008, 11:13  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

PHP-Code:
//Statt:
    
trim($txt[$i]); 
//wolltest du sicher schreiben:
    
$txt[$i] = trim($txt[$i]); 
Zitat:
Ich muss für im Betrieb ein Script machen, welches den Bestand einer Tabelle in der Oracle-Datenbank abfragt und mit einem importierten txt-File vergleicht. Nach diesem Vergleich kommen entweder INSERT-, UPDATE- oder DELETE-Befehle, um die DB zu
Wenn die Tabelle nach der Verarbeitung exakt der Textdatei entsprechen soll, dann mach einfach TRUNCATE TABLE nebst INSERT INTO und fertig.
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?

Geändert von Wolla (02.12.2008 um 11:17 Uhr).
Wolla ist offline  
Alt 02.12.2008, 11:15  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Den Unterschied kann man doch in der Ausgabe sehen: Für das erste Feld werden (zusätzliche) Zeilenumbrüche angezeigt, für das zweite nicht. Die Zeichenketten im ersten Feld enthalten also ein oder mehrere Zeilenumbruch-Zeichen.

PHP: file - Manual
Zitat:
Hinweis: Jede Zeile in dem resultierenden Array enthält das Zeilenende, weshalb Sie trim() verwenden müssen, falls der Zeilenumbruch nicht vorhanden sein soll.
David ist offline  
Alt 02.12.2008, 11:15  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
JeKyll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Koala Beitrag anzeigen
beschäftige Dich noch mal mit den Array-Grundlagen:
Quakenet/#php Tutorial - de - Arrays
Thx für das schnelle posten. Allerdings bringt mich das nicht weiter, weil ich da ebenfalls schon nach einer Lösung gesucht habe

Zitat:
Zitat von Koala Beitrag anzeigen
und benutze foreach - ist ne feine Sache.
was ist dann das:

PHP-Code:
<?php
foreach($txtarr as $key => $value)
{
    
//blah
}
?>

Zitat:
Zitat von Koala Beitrag anzeigen
Schlaufen gibt es an den Schuhen oder beim Henker
aber nicht bei PHP.
rofl hab ich gar nicht gemerkt ^^ natürlich sind Schleifen gemeint
JeKyll ist offline  
Alt 02.12.2008, 12:33  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
was ist dann das:
Auch diese Frage wurde schon mannigfaltig beantwortet. foreach
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 02.12.2008, 12:40  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
JeKyll befindet sich auf einem aufstrebenden Ast
Standard

Es hat geklappt!

Vielen Dank euch allen, ihr wart eine grosse Hilfe!

Gruss JeK

PS: der trim() am richtigen Ort wirkt wunder

PHP-Code:
<?php 
// erster array: neue daten 
$txtfile file("data.txt"); 
$txt = array(); 
for(
$i 0$count sizeof($txtfile); $i $count; ++$i

    
$txt[$i] = explode(";"$txtfile[$i]);


$txtarr = array(); 
for(
$i 0$i $count; ++$i

    
$txtarr[$i] = trim($txt[$i][1]);
}
?>

Geändert von JeKyll (02.12.2008 um 12:47 Uhr).
JeKyll ist offline  
Alt 02.12.2008, 12:41  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
JeKyll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Auch diese Frage wurde schon mannigfaltig beantwortet. foreach
Das war ironisch gemeint, da ich es schon im Code verwendet habe... sry
JeKyll ist offline  
Alt 02.12.2008, 12:48  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Wozu eigentlich 2 Schleifen in #7? $txt wird doch mit gleichem Index verwendet? Da kannste doch auch gleich trim und Arrayerzeugung in der ersten Schleife ausführen.

Zudem: $txt ist durch das explode ein Array. trim erwartet aber einen String, das sollte also so nicht funktionieren...
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
Kategoriedaten rekursiv in Array bringen Schiedsrichter PHP Tipps 2008 2 10.12.2007 15:43
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php code \ist nicht gleich\

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum