ugrás a tartalomhoz

Adat kinyerése és cseréje

amorf · 2011. Júl. 30. (Szo), 00.05
Sziasztok.

Szeretnék segítséget kérni az alábbi problémám megoldásához.
Sajnos nem vagyok PHP-ben jártas, idáig is egy ismerősöm segített eljutni, de sajnos manapság ő sem ér rá, így gondoltam hozzátok fordulok.

Adott egy xml struktúra melyből egy php scriptel nyerek ki adatokat a megfelelő sorokból. Szeretném elérni, hogy az egyik sorból kinyert adatot (ez az adat vagy 0 vagy 1) lecserélné echo-záskor arra az értékre amelyet én párosítok a két lehetséges adathoz. Egyszerűbben: Ha 0 akkor ne 0-át írjon ki hanem A betűt és ha 1 akkor ne 1-et hanem H betűt.

A kód (részlete) amivel dolgozok az alábbi:

if (strstr($sor, $online[0]) && strstr($sor, $online[1])&&($sorszam==8))
$t_online = str_replace($online, "", $sor);

Ez olvassa ki az adott sor adott karakterei közül a számomra lényeges információt.

Az "echo $t_online" vagy 0-át vagy 1-et eredményez.
Szeretném ha "echo $t_online" használatakor 0 esetében A-t illetve 1 esetében H-t kapnék eredményül.

Köszönöm szépen előre is a segítségeteket.

Üdv:
amORf
 
1

echo $t_online == 0 ? 'A' :

Poetro · 2011. Júl. 30. (Szo), 00.32
echo $t_online == 0 ? 'A' : $t_online == 1 ? 'H' : $t_online;
3

:(

amorf · 2011. Júl. 30. (Szo), 12.35
Köszönöm a gyors segítséget.
Sajnos nem működik úgy ahogyan én elképzeltem.

Mind a két esetben az eredmény "H".

Szeretném azt elérni, hogy "echo $t_online" lefutásakor az eredmény 0 esetében A illetve 1 esetében H lenne.

Így működik:

Az xml struktúrában így helyezkednek el az adatok:

<online>0</online>
<valami>32423</valami>

A "0" egy változó mely vagy 1 vagy 0 lehet.
Tehát a fenti idézetben lévő sor olvassa ki a két tag közül a lényeget (1-et vagy 0-át).
Az "echo $t_online" parancsal ki is olvassa helyzettől függően a 0-át vagy az 1-et.
Ezekhez az értékekhez szeretném a fent említett módon párosítani a betűket.

Ne haragudjatok, de nem tudom érthetőbben leírni. :S
4

Lemaradt a zárójel

Poetro · 2011. Júl. 30. (Szo), 12.48
echo $t_online == '0' ? 'A' : ($t_online == '1' ? 'H' : $t_online);
megj: utálom a PHP precedenciáját a ternary operátor esetén. Úgy tűnik, ez a viselkedés nem egyedi, ugyanis Ruby is így viselkedik, viszont Perl és JavaScript esetén az első változat is jó lett volna.
5

Vagy 1-et vagy 0-át ír.

amorf · 2011. Júl. 30. (Szo), 13.01
Köszönöm.
Sajnos még mindig nem jó. Az eredmény vagy 1 vagy 0. A betűk nincsenek sehol :(
6

Nézd meg a $t_online hosszát!

H.Z. v2 · 2011. Júl. 30. (Szo), 13.14
Nézd meg a $t_online hosszát! Szerintem lesz benne még valami olyan karakter, ami nem jelenik meg.
(pl. szóköz, tabulátor)
9

Amennyire értettem, hogy mit

amorf · 2011. Júl. 30. (Szo), 13.56
Amennyire értettem, hogy mit tanácsolsz, megnéztem és nem találtam a "0" án kívül más karaktert a kérdéses helyen. Volt korábban hasonló problémám, mikor egy kötőjel használatával működött a dolog. Másolok kódrészt hátha úgy többet tudsz/tudtok segíteni.

<?
$tomb = file("http://barmi.hu/akarmi.php");

$online = array("<online>","</online>");

$sorszam = -1;

foreach ($tomb as $sor) {

$sorszam++;
if (strstr($sor, $online[0]) && strstr($sor, $online[1])&&($sorszam==8))
$t_online = str_replace($online,"", $sor);

}

echo $t_online == '0' ? 'A' : ($t_online == '1' ? 'H' : $t_online);
?>



Esetleg nem lehetne megoldani ezt "if" és "else" bevonásával?
Például ha $t_online egyenlő 0-val akkor legyen egyenlő A-val. Egyéb esetben pedig H-val.
Vagy más megközelítésből: Ha $t_online nem egyenlő 1-el akkor legyen egyenlő A-val egyéb esetben pedig H-val.
Még egyszer mondom nem értek ehez :S

Nagyon szépen köszönöm az eddigi munkádat is.
10

$xml =

Poetro · 2011. Júl. 30. (Szo), 14.57
$xml = file_get_contents('http://barmi.hu/akarmi.php');
if ($xml && preg_match('!<online>(\d+)<\/online>!', $xml, $matches)) {
  $t_online = $matches[1];
  echo $t_online == '0' ? 'A' : ($t_online == '1' ? 'H' : $t_online);
}
11

Egyrészt lásd Poetro

H.Z. v2 · 2011. Júl. 30. (Szo), 15.11
Egyrészt lásd Poetro hozzászólását itt alattam/felettem, másrészt, ha ragaszkodsz a már meglévőhöz, akkor másold már ide a var_dump($t_online); kimenetét!
12

Szeretném megtartani az

amorf · 2011. Júl. 30. (Szo), 16.03
Szeretném megtartani az eredeti kódot, mert amit ide másoltam az csak egy adat kinyerésére szolgál, de további 20-25 adatot is ugyan ezzel a módszerrel echo-zok ki.

Lefuttattam a "var_dump($t_online);" ot és az eredmény az alábbi:

string(6) " 0 "


Ezek szerint nem csak "0" az adat önmagában hanem szóköz vagy valami hasonló is van mellette? :O Bocsi ha hülyeséget írtam :D
13

Igen: 6 byte-os a változód,

H.Z. v2 · 2011. Júl. 30. (Szo), 16.08
Igen: 6 byte-os a változód, ebből csak egy a 0, a többi space v. egyéb, nem megjeleníthető karakter, így viszont nem lesz egyenlő sem "0"-val, sem "1"-gyel.
Használd a trim függvényt, amikor értéket adsz a $t_online-nak!
14

Köszönöm a választ. Esetleg a

amorf · 2011. Júl. 30. (Szo), 16.19
Köszönöm a választ.
Esetleg a megvalósításához is kaphatnék egy kis segítséget? Tudom fárasztó lehet a hozzá nem értő emberek nyűgjeit bogarászni, de tényleg fontos lenne.

Ami adott:
....
if (strstr($sor, $online[0]) && strstr($sor, $online[1])&&($sorszam==11))
$t_online = str_replace($online,"", $sor);
....
echo $t_online == '0' ? 'A' : ($t_online == "1" ? "H" : $t_online);
....
Kicsit jobban megnéztem az eredményt és szerintem 5db szóköz van a 0 ill. az 1 előtt.
Ebben az esetben mi lenne a teendőm? Lennétek olyan kedvesek, hogy leírjátok miként módosulna a kód?

Köszönöm.
15

$t_online =

H.Z. v2 · 2011. Júl. 30. (Szo), 16.21
$t_online = trim(str_replace($online,"", $sor));
16

Nagyon szépen köszönöm

amorf · 2011. Júl. 30. (Szo), 16.31
Nagyon szépen köszönöm mindenkinek a segítséget. Működik.
7

Áruld el...

Poetro · 2011. Júl. 30. (Szo), 13.17
Áruld már el, hogy mit jelent számodra, az, hogy az eredmény 0 vagy 1? Mert ha én lefuttatom a fenti kódot, akkor $t_online változó értékétől függően nekem vagy A-t vagy H-t ír ki. Az a gyanúm, hogy a $t_online értéke valami egészen más, mondjuk 0</online>
8

...

carstepPCE · 2011. Júl. 30. (Szo), 13.44
lehet egy (int)$t_online talan megoldja a poblemat, ha a $t_online elso karaktere "0" vagy "1"
2

Szerintem a legegyszerűbb

H.Z. v2 · 2011. Júl. 30. (Szo), 00.35
Szerintem a legegyszerűbb (feltéve, hogy nem kell ellenőrizni, hogy csak 0 és 1 lehet benne) valami ilyen:

echo ($t_online?'H':'A');

Már ha jól értem a problémádat...


----
fél perccel lemaradtam... :-)