CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
11.04.2016, 12:46:45
|
Anfänger
|
|
Registriert seit: Apr 2016
Alter: 35
Beiträge: 16
|
|
AW: Array-Vergleich und richtige ausgabe
Irgendwie verstehe ich das nicht ganz so mit den array_diff. Es funktioniert nicht so ganz bei mir...
Hinweis: CSV-Datei, Inhalt besteht nur aus und sieht so aus:
Vorname,Nachname
Rita,MusterNachname
Hier mal der komplette Code.
Code:
<?php
class importer {
protected $file;
protected $importData_value = array();
protected $importData_values = array();
protected $csvstring = array();
protected $systemstring = array();
private static function checkCsvFile($file) {
if(!file_exists($file) && !is_readable($file)) {
throw new Exception($file . "<br/>" ." Es wurde keine Datei gefunden oder die Datei ist nicht lesbar.");
}
return $file;
}
public function insertCsvFile() {
try {
$CSVfiles = PFAD;
$file = self::checkCsvFile($CSVfiles);
$this->file = $file;
self::csvFileInformation();
} catch(Exception $e) {
echo "Fehler: " , $e->getMessage();
}
}
private function systemStrings() {
$zeichenkette = [
'Vorname' => 'Vorname',
'Nachname' => 'Nachname',
'Name' => 'Nachname',
'Strasse' => 'Strasse',
'PLZ' => 'PLZ',
'Ort' => 'Ort',
'Personal_Nr' => 'Personalnummer',
'Anrede' => 'Anrede',
'Titel' => 'Titel',
'Telefon' => 'Telefon',
'Fax' => 'Fax',
'Email' => 'Email',
'rexxMail' => 'rexxMail',
'Abteilung' => 'Abteilung',
'Betriebsrat' => 'nein',
'Status' => 'Benutzerprofil',
'SB_Vertretung' => 'nein',
'Position' => 'Position',
'Username' => 'Username',
'Benutzername' => 'Username',
'Passwort' => 'Passwort',
'rexx-Passwort' => 'rexx-Passwort',
'aktiv' => 'ja',
'Datumsformat' => 'Datumsformat',
'MeineStartseite' => 'Meine Startseite',
'Sprache' => 'Sprache'
];
return $zeichenkette;
}
private function checkDifferents($csv, $system) {
$i = 0;
while ($i == 0) {
foreach($csv as $csvkey) {
$erg_csv[] = $csvkey;
$this->csvstring = $erg_csv;
}
foreach($system as $systemkey => $value) {
$erg_system[] = $systemkey;
$this->systemstring = $erg_system;
}
$test1 = ['Nachname', 'Vorname', 'Strasse'];
$test2 = ['Nachname', 'Vorname', 'Straße'];
Wenn ich beim $ergebnis "$this->csvstring, $this->systemstring" durch $test1 und
$test2 ersetze, dann funktioniert das... ich verstehe aber nicht wieso es nicht mit den anderen beiden Arrays klappt. Wenn ich mir die Arrays alle einzelnd ausgebe, sehen sie alle vom Aufbau gleich aus!
$ergebnis = array_diff($this->csvstring, $this->systemstring);
return $ergebnis;
}
}
private function csvFileInformation() {
self::readCsvHeadling();
echo "<pre>";
print_r($this->importData_values);
echo "------";
echo "<br/>";
print_r(self::systemStrings());
echo "</pre>";
echo "<br/>";
echo "<b><pre>";
print_r(self::checkDifferents($this->importData_values, self::systemStrings()));
echo "</b></pre>";
echo "<br/>";
echo "<pre>";
print_r($this->systemstring);
echo "</pre>";
echo "<br/>";
echo "<pre>";
print_r($this->csvstring);
echo "</pre>";
exit;
}
private function readCsvHeadling() {
$csvfile = fopen($this->file, 'r');
$csv_data = fgets($csvfile, 10240);
$this->importData_value = explode(",", $csv_data);
$i = 0;
while ($i == 0) {
$value_array = array();
$value_array[] = $this->importData_value;
foreach($value_array as $csvArray) {
return $this->importData_values = $csvArray;
}
}
fclose($csvfile);
}
}
$Start = new importer();
$Start->insertCsvFile();
|
11.04.2016, 13:33:43
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Array-Vergleich und richtige ausgabe
"dann funktioniert das" was soll das wieder heissen? array_diff gibt dir die Unterschiede zurück, und das sollten bei der Eingabe von ['Vorname', 'Nachname'] ne ganze Menge sein.
Und wenn du die nicht übersetzt, dann brauchen die da auch nicht doppelt drinstehen.
|
11.04.2016, 13:45:13
|
Anfänger
|
|
Registriert seit: Apr 2016
Alter: 35
Beiträge: 16
|
|
AW: Array-Vergleich und richtige ausgabe
Das heißt...
Ausführung1: (DIE AUSFÜHRUNG DIE ICH BENÖTIGE)
Code:
private function checkDifferents($csv, $system) {
$i = 0;
while ($i == 0) {
foreach($csv as $csvkey) {
$erg_csv[] = $csvkey;
$this->csvstring = $erg_csv;
}
foreach($system as $systemkey => $value) {
$erg_system[] = $systemkey;
$this->systemstring = $erg_system;
}
$test1 = ['Nachname', 'Vorname', 'Strasse'];
$test2 = ['Nachname', 'Vorname', 'Straße'];
$ergebnis = array_diff($this->csvstring, $this->systemstring);
return $ergebnis;
}
}
Ausgabe:
Array
(
[1] => Nachname
)
Ausführung2: (NUR EINE AUSFÜHRUNG UM DAS ARRAY_DIFF ZU TESTEN)
Code:
private function checkDifferents($csv, $system) {
$i = 0;
while ($i == 0) {
foreach($csv as $csvkey) {
$erg_csv[] = $csvkey;
$this->csvstring = $erg_csv;
}
foreach($system as $systemkey => $value) {
$erg_system[] = $systemkey;
$this->systemstring = $erg_system;
}
$test1 = ['Nachname', 'Vorname', 'Strasse'];
$test2 = ['Nachname', 'Vorname', 'Straße'];
$ergebnis = array_diff($test1, $test2);
return $ergebnis;
}
}
Ausgabe:
Array
(
[2] => Strasse
)
Wie man sieht, wird bei der Ausführung2 (TEST-AUSFÜHRUNG) die Ausgabe, bzw. das was Array_diff liefert richtig ausgegeben.
und bei der Ausführung1 (Die eigentlich benötigt wird) die Ausgabe, bzw. das was Array_diff lieferen soll, nicht korrekt geliefert, weil der Nachname ja vorhanden ist. Normalerweise sollte er mir bei der Ausführung1 ein leeres Array liefern und das ich das was ich nicht verstehe.
|
11.04.2016, 15:18:20
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Array-Vergleich und richtige ausgabe
dann guck halt mal was da drin steht, ab da sollte doch ein einfaches print_r Klarheit bringen.
Code:
print_r($this->csvstring); // wieso "string" wenn's ein Array ist?
print_r($this->systemstring);
print_r($test1);
print_r($test2);
|
11.04.2016, 16:13:29
|
Anfänger
|
|
Registriert seit: Apr 2016
Alter: 35
Beiträge: 16
|
|
AW: Array-Vergleich und richtige ausgabe
Zitat:
dann guck halt mal was da drin steht, ab da sollte doch ein einfaches print_r Klarheit bringen.
|
Bringt mir keine Klarheit... :-(
Zitat:
print_r($this->systemstring);
|
Array
(
[0] => Vorname
[1] => Nachname
[2] => Name
[3] => Strasse
[4] => PLZ
[5] => Ort
[6] => Personal_Nr
[7] => Anrede
[8] => Titel
[9] => Telefon
[10] => Fax
[11] => Email
[12] => rexxMail
[13] => Abteilung
[14] => Betriebsrat
[15] => Status
[16] => SB_Vertretung
[17] => Position
[18] => Username
[19] => Benutzername
[20] => Passwort
[21] => rexx-Passwort
[22] => aktiv
[23] => Datumsformat
[24] => MeineStartseite
[25] => Sprache
)
Zitat:
print_r($this->csvstring); // wieso "string" wenn's ein Array ist?
|
das ist nur der Name! Natürlich ist es ein Array, ich gebe aber zu das der Name dumm gewählt ist.
Array
(
[0] => Vorname
[1] => Nachname
)
Array
(
[0] => Nachname
[1] => Vorname
[2] => Strasse
)
Array
(
[0] => Nachname
[1] => Vorname
[2] => Straße
)
Hoffentlich bringt dir das Klarheit, weil für mich alle Arrays vom Aufbau gleich aussehen.
und $test1 und $test2 macht er den array_diff korrekt und
bei $csvstring und $systemstring eben nicht, da findet er wie oben beschrieben und gezeigt, den Nachnamen nicht.
|
12.04.2016, 09:54:28
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Array-Vergleich und richtige ausgabe
Dann hast du da irgendwo andere Daten drin, oder ein anderes Format, oder interpretierst die Rückgabewerte falsch, array_diff funktioniert: https://3v4l.org/e2GPW
Lass dir die Arrays mit var_export ausgeben, dann kannst du dir auch ein lauffähiges, reproduzierbare Bspl in der Sandbox erzeugen
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:05:33 Uhr.
|