ugrás a tartalomhoz

Tömbös kérdés...

Anonymous · 2005. Jún. 3. (P), 10.42
Sziasztok!

Adott két tömb. Az egyik tömb a passwd fáljból a felhasználók neveit tartalmazza, a másik tömb is szintén felhasználóneveket, melyek között vannak olyanok, amik megtalálhatóak az első tömbben. Én egy olyan tömböt szeretnék, amely azokat a neveket tartalmazza, amely az egyik tömbben megtalálható, de a másikban nem. Ha jól emlékszem ezt halamozok különbségének nevezzük.
Egy példával is élek:

Egyik tömb: proba, szabi, ssh, root
Másik tömb: proba, ssh
Eredemény tömb: szabi, root

Szóval így kéne működnie...

A próbálkozásom:

<?php

$passwd = file("/etc/passwd");

foreach ($passwd as $ertek) {
$tomb[] = substr($ertek, 0, strpos($ertek, ":"));
}

$adatbazis = file("tomb.txt");
$eredmeny = array_diff($adatbazis,$tomb);
foreach ($eredmeny as $ertek) {
echo $ertek . "<br>";
}

?>

Erre visszaadja a teljes $adatbazis tömböt, és nem a különbséget...
 
1

newline

VBala · 2005. Jún. 3. (P), 11.13
Amikor a file() beteszi a tömbbe a sorokat, akkor az elemek végén hagyja a '\n' kataktert, valószínűleg ez okozza a problémát. Beolvasás után menj végig rajta trim()-mel, és szerintem működni fog.
6

VBala megoldása célhoz

Anonymous · 2005. Jún. 3. (P), 11.40
VBala megoldása célhoz vezetett!

Köszönöm szépen a segítséget mindenkinek!
2

Egyszerű megoldás

halee · 2005. Jún. 3. (P), 11.13
Szia!

Mivel a php nem kezeli halmazokat, ezért talán az a legegyszerűbb, valahogy így jársz el:

unset($ujtomb)
foreach ($tomb1 as $kulcs => $ertek) {
$ujtomb[$ertek]=$ertek
}

foreach ($tomb2 as $kulcs => $ertek) {
$ujtomb[$ertek]=$ertek
}

sort ($ujtomb)

Röviden, hogy ez hogy működik: Mindkét tömbön végigrohansz és az összes értéket átgányolod az uj tömbbe az értéknek megfelelő tömbindexel, így semmi gond ha az érték kétszer szerepel, mivel ugyanazt az értéket fogja felülírni. Majd a végén ha akarod rendezed a tömböt.

Szerintem ez a legegyszerűbb megoldás az említett problémára, ha tudtok jobbat engem is érdekel... :)

Üdv, Halee
4

Jah csak az elejét olvastam

halee · 2005. Jún. 3. (P), 11.14
Jah csak az elejét olvastam el... :)
De attólmég működik...
3

Elvileg jó

Török Gábor · 2005. Jún. 3. (P), 11.14
A kód szerintem jó, helyes. Ha így működik, annak az lehet az oka, hogy a $tomb tömbben nincs egy olyan érték sem, amely a másikban megtalálható. Illetve fordítva is igaz lehet, ugye nem mindegy, melyik tömb az első operandus.

--
slink
http://20y.hu/
5

Köszönöm a

Anonymous · 2005. Jún. 3. (P), 11.30
Köszönöm a válaszokat!

Direkt olyan értékekkel dolgozom, melyek mindkét tömbben megtalálhatóak. Az operandusokat felcserélve sem működik, mindig a teljes első operandus tömböt adja vissza.
De most megpróbálom a válaszaitok alapján, hátha...