PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   mehrdimensionales array einlesen - aber wie? (https://www.php-resource.de/forum/php-developer-forum/91034-mehrdimensionales-array-einlesen-aber-wie.html)

janein 25-03-2008 22:22

mehrdimensionales array einlesen - aber wie?
 
Ich möchte folgendes in ein mehrdimensionales array aus einer Datei einlesen:

a,b,c
x,y,z

folgender code zeit aber leider kein nur einen wert in $teilx:
[php]
$lines = file('/var/www/web22/log/news_1.txt');
$lines = array_values($lines);

foreach ($lines as $num => $wert) {
$teil = explode('|',$wert);

foreach ($teil as $teilx) {
echo $teilx." : <br>\n";
}
array($teilx);
}
var_export($teilx);[⁄php]

Wie bekomme ich alle Zeilen als Datei eingelesen, dass das array so aussieht?

array(
array(a,b,c),
array(x,y,z));

Kropff 25-03-2008 22:31

auf die schnelle.
PHP-Code:

// datei einlesen
$file file_get_contents('/var/www/web22/log/news_1.txt');
// anhand der zeilenumbrüche aufdröseln
$line explode ("\n"$file);
foreach (...
usw.) 

ggf. anstelle von "\n" ein "\r\n" oder trim setzen. und immer schön mit print_r arbeiten.

gruß
peter

janein 25-03-2008 22:42

Zitat:

Original geschrieben von Kropff
auf die schnelle.
PHP-Code:

// datei einlesen
$file file_get_contents('/var/www/web22/log/news_1.txt');
// anhand der zeilenumbrüche aufdröseln
$line explode ("\n"$file);
foreach (...
usw.) 

ggf. anstelle von "\n" ein "\r\n" oder trim setzen. und immer schön mit print_r arbeiten.

gruß
peter

Ja, ok. Danke. Die Zeilen bekomme ich auch eingelesen. Die Herausforderung ist aber gleichzeitig noch die Zeilen anhand des Trennzeichnes ',' in ein weiteres array aufzuspitten, also array im array zu erstellen. Und das macht Probleme, immernoch.

Griecherus 25-03-2008 22:44

Ich verstehe nur Bahnhof. Vielleicht liegts daran, dass ich mir gerade den Wanst vollgehauen habe :D
Aber mal im Ernst: Was bezweckst du? Wie sehen die Daten unverarbeitet aus und wie genau soll das Ergebnis aussehen?

Kropff 25-03-2008 22:47

wo ist das problem? erst die zeilen anhand des umbruchs aufdröseln. und dann in einer weiteren schleife anhand des | aufdröseln und das dann in noch einer schleife verarbeiten.

gruß
peter

janein 25-03-2008 22:48

Zitat:

Original geschrieben von Griecherus
Ich verstehe nur Bahnhof. Vielleicht liegts daran, dass ich mir gerade den Wanst vollgehauen habe :D
Aber mal im Ernst: Was bezweckst du? Wie sehen die Daten unverarbeitet aus und wie genau soll das Ergebnis aussehen?

unverarbeitet:
a,b,c
x,y,z


Ergebniss:
array(
array(a,b,c),
array(x,y,z));

Ziel:
Es soll die unterschiedlichen Inhalte also a,b,c mit x,y,z verglichen werden und be Übereinstimmung ein Eintrag gelöscht werden. Hab da wohl ne Denkblockade ...

Griecherus 25-03-2008 22:51

PHP-Code:

$result = array();

foreach (
explode("\n"$lines) as $line)
{
    
$result[] = explode(','$line);
}

echo 
'<pre>';
print_r($result);
echo
'</pre>'


janein 25-03-2008 23:06

Zitat:

Original geschrieben von Griecherus
PHP-Code:

$result = array();

foreach (
explode("\n"$lines) as $line)
{
    
$result[] = explode(','$line);
}

echo 
'<pre>';
print_r($result);
echo
'</pre>'


Aha, so einfach. Danke. Hast du noch einen Tipp wie ich nur einzelne gleiche Einträge vergleichen und falls gleich diese lösche?

a,b,c
x,z,z

Wenn also z.B. a und z denselben Inhalt haben. Wie lösche ich dann ein von zwei array in welchem ein gleicher Inhalt auftaucht?

Griecherus 25-03-2008 23:46

Zitat:

Original geschrieben von janein

a,b,c
x,z,z

Wenn also z.B. a und z denselben Inhalt haben. Wie lösche ich dann ein von zwei array in welchem ein gleicher Inhalt auftaucht?

Mithilfe von array_intersect(). Die Funktion liefert die Schnittmenge der an sie übergebenen Arrays, also genau das, was du suchst. Das Löschen musst du dann noch vornehmen. Es gibt nicht für alles ne Funktion :)

janein 26-03-2008 00:42

Zitat:

Original geschrieben von Griecherus
Mithilfe von array_intersect(). Die Funktion liefert die Schnittmenge der an sie übergebenen Arrays, also genau das, was du suchst. Das Löschen musst du dann noch vornehmen. Es gibt nicht für alles ne Funktion :)
Leider ist das nicht genau was ich suche, da ich nur bestimmte Werte des array überprüfen will. Die Arrayinhalte können also unterschiedlich sein.

Griecherus 26-03-2008 00:46

Zitat:

Original geschrieben von janein
Leider ist das nicht genau was ich suche, da ich nur bestimmte Werte des array überprüfen will. Die Arrayinhalte können also unterschiedlich sein.
Ohne konkretes Beispiel oder noch besser eine Anforderungsdefinition (was genau bezweckst du) kann ich dich jetzt nur verdutzt angucken :confused:
Eins kann ich dir mit relativer Wahrscheinlichkeit aber schon sagen: Wenn es nicht genau das ist, was du suchst, dann wird es ein Teil der Lösung sein, das du für dein Vorhaben brauchst. Wie gesagt: Für alles gibt es keine vorgefertigten Funktionen.

janein 26-03-2008 01:08

Zitat:

Original geschrieben von Griecherus
Ohne konkretes Beispiel oder noch besser eine Anforderungsdefinition (was genau bezweckst du) kann ich dich jetzt nur verdutzt angucken :confused:
Eins kann ich dir mit relativer Wahrscheinlichkeit aber schon sagen: Wenn es nicht genau das ist, was du suchst, dann wird es ein Teil der Lösung sein, das du für dein Vorhaben brauchst. Wie gesagt: Für alles gibt es keine vorgefertigten Funktionen.

Noch einmal:
Position(1,2,3)
a,b,c
a,y,z


stammen eingelesen aus einer Datei. Nun sollen nur eine Version des eingelesenen arrays später ausgegeben werden die an Position "1" gleich sind. a,b,c oder a,y,z soll also ausgegeben werden weil "a" der gleiche Wert ist wie in einer andere Zeile "a".

Griecherus 26-03-2008 01:15

Zitat:

Original geschrieben von janein
Noch einmal:
Position(1,2,3)
a,b,c
a,y,z

stammen eingelesen aus einer Datei. Nun soll sollen nur die Teile des eingelesenen arrays später ausgegeben werden die an Position "1" nicht gleich sind.

Jetzt werden se mal nicht papig ;)

Und wo genau ist das Problem? Wo die eigenen Ansätze? Zeig mal einen eigenen Versuch oder wenigstens Ideen, die man weiterführen könnte.
Du suchst übrigens nach der Position 0, nicht 1.

janein 26-03-2008 01:21

Zitat:

Original geschrieben von Griecherus
Jetzt werden se mal nicht papig ;)

Und wo genau ist das Problem? Wo die eigenen Ansätze? Zeig mal einen eigenen Versuch oder wenigstens Ideen, die man weiterführen könnte.
Du suchst übrigens nach der Position 0, nicht 1.

$lines1 = file_get_contents('/var/www/web22/log/new1.txt');
$lines2 = file_get_contents('/var/www/web22/log/new2.txt');
#$result = array_values($lines);
$i = 0;
#$lines = array();
foreach (explode("\n", $lines1) as $line1)
{
$result1[] = explode('|', $line1);
$i++;
}

foreach (explode("\n", $lines2) as $line2)
{
$result2[] = explode('|', $line2);
}

echo '<pre>';
#print_r($result);
echo'</pre>';

#$result1 = array('a','b','c');
#$result2 = array('x','y','a');
$result = array_merge($result1, $result2);
echo '<pre>';
print_r($result[$i][0]);
echo'</pre>';

echo $result[1][0];

Ich habe probiert mit $result[$i][0] auf die Position zuzugreifen, es klappt aber nicht. Mir fehlt da der logische ansatz bzw. ich auf die Positionen zugreifen kann, um diese zu vergleichen.

Griecherus 26-03-2008 01:22

Sind die Indizies der Arrays denn numerisch? Falls ja, dann ist array_intersect nämlich durchaus das, was du suchst. Du musst nur zusätzlich überprüfen, ob die Indizes der Übereinstimmungen (im Rückgabewert enthalten) gleich 0 sind.

EDIT:
Gut, ganz so simpel ist es nicht. Siehe nächstes Posting.



Alle Zeitangaben in WEZ +2. Es ist jetzt 21:03 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG