GRY-Online.pl --> Archiwum Forum

PHP i banalne pytanie o tablice

14.12.2010
16:34
[1]

kamyk_samuraj [ Legend ]

PHP i banalne pytanie o tablice

Witam
Ostatnio zaświtał mi w głowie pomysł napisania czegoś w PHP. Bo i wpadłem na pewien problem
Oto kod:

$dane = fread(fopen("plik.txt", "r"), filesize("plik.yxt"));
$z = explode("\n",$dane);
foreach($z as $z1) ‹
$z2 = explode(" ",$z1);
...


ii moje pytanko: jak dostać się do pojedynczego elementu (np. szóstego) w jednej (ściśle określanej) z tablic z2 utworzonych poza foreach?

14.12.2010
16:42
smile
[2]

Jack Walters [ Pretorianin ]

Chętnie bym pomógł ale nie kaput !!!!
możesz rozwinąć problem...
bo....


$dane = fread(fopen("plik.txt", "r"), filesize("plik.yxt"));
$z = explode("\n",$dane);
foreach($z as $z1) ‹
$z2 = explode(" ",$z1);
...


może...
$ filesize("data.dmp)).codegraphics/explode

14.12.2010
16:46
[3]

yasiu [ Legend ]

$z2[5] - ale to chyba za proste? zresztą, ja tak jak Jack nie wiem w czym jest problem :D

14.12.2010
17:29
[4]

kamyk_samuraj [ Legend ]

okjej - zabrakło mi jeszcze jednego foricza

$dane = fread(fopen("plik.txt", "r"), filesize("plik.yxt"));
$z = explode("\n",$dane);
foreach($z as $z1) ‹
$z2 = explode(" ",$z1);
foreach $z2 as $z3

...



czyli: jak dostać się do piątego elementu z trzeciej tabeli $z2 (bo wnioskuje\, że foricz także tworzy tabele). Oczywiście wskazanie $z3[4] (czy z2[4]) nie zadziała bo nazwa nie jest jednoznaczna.

14.12.2010
17:36
[5]

yasiu [ Legend ]

$z2[2][4] - piąty element trzeciej tabelki

może napisz, co chcesz zrobić :)

14.12.2010
18:27
[6]

kamyk_samuraj [ Legend ]

Próbuję dostać się do komórki w tablicy, by np. wyświetlić ją przez echo
$z2[2][4] także nie jest wartością jednoznaczną - jeśli już to $z[2][4]

chyba mam mental break i zaczynam tęsknić za wskaźnikami.

14.12.2010
21:29
[7]

mackie majcher [ Konsul ]

kamyk_samuraj <-- ale co to znaczy "wartością niejednoznaczną"? Chyba masz na myśli, że to jest tablica, ale tablica jest wartością jednoznaczną, cokolwiek by to wyrażenie miało nie znaczyć.

Nie chce mi się teraz wyobrażać jak to wygląda, tym bardziej, że ty możesz to sobie w prosty sposób wyświetlić. Użyj funkcji var_dump() za argument przyjmując tablicę, z której element chcesz pobrać i w źródle strony zobaczysz pięknie rozpisaną tablicę. Teraz nie powinieneś mieć problemu z wyłuskaniem elementu, o który Ci się rozchodzi.

14.12.2010
22:51
[8]

kamyk_samuraj [ Legend ]

kamyk_samuraj <-- ale co to znaczy "wartością niejednoznaczną"? Chyba masz na myśli, że to jest tablica, ale tablica jest wartością jednoznaczną, cokolwiek by to wyrażenie miało nie znaczyć.

Tak - element, o który mi się rozchodzi znajduje się w tablicy. Problem w tym, że sama tablica znajduje się w kolekcji (czy tam tablicy tablic) - dlatego podanie tylko jednego indeksu nie przejdzie. A podanie trzech indeksów (bo tyle jest poziomów zagnieżdżeń we właściwym programie) nic nie wyświetla.
Po kolei to jest tak (to przykład z pierwszego postu)
$z =
[0] tydjytdciytd tcjfgx tycyt
[1] uyvkhyg yfhjgc tvch ytycku
...
Po foriczu i explode mam $z2
[0][0] tydjytdciytd
[0][1] tcjfgx
[0][2] tycyt
[1][0] uyvkhyg
[1][1] yfhjgc
[1][2] tvch
[1][3] ytycku
...
Ale chyba się kopnałem gdzieś w programie (nie w rozpisanym tutaj przykładzie)

15.12.2010
20:14
[9]

kamyk_samuraj [ Legend ]

^up^

$regex = "[0-9]+\[ms\]";
$dane = fread(fopen("plik.TXT", "r"), filesize("plik.TXT"));
ereg($regex,$dane,$head);
$badania = split($regex,$dane);
foreach ($badania as $wyniki) ‹
$wyniki = explode(" ",$badania);


Trochę zmieniłem kod ale pytanie nadal aktualne - jak dostać się do zawartości komórki tablicy po foriczu i explode? Powinno być 5 tablic po 1024 dane.
echo $wyniki[3][4] // piąta wartość w czwartej tabeli
i
echo $wyniki[4] // nawet nie wiem, co to miałoby być
nie działają.
Ponadto, czemu tablica po ereg jest jednoelementowa mimo, że jest 5 wpisów spełniających regex (a z opisu funkcji ereg wynika, że powinny być wszystkie)?

15.12.2010
20:22
[10]

yasiu [ Legend ]

jakim cudem tablica $wyniki ma być wielowymiarowa, skoro przy każdym foreach ją nadpisujesz od nowa?

15.12.2010
20:30
[11]

kamyk_samuraj [ Legend ]

Czyli jak powinienem to zrobić? Najpierw przelecieć to explode (nawet jeszcze przed splitem)? No i co z tym eregiem?

15.12.2010
20:41
[12]

yasiu [ Legend ]

z ereg nigdy nie korzystałem... nie pamiętam dokładnie jak działają tablice w php, ale nawet bez tej wiedzy można to zrobić tak

$licznik=0
foreach($badania as $wyniki)
$wyniki_rozbite[$licznik]=explode(" ", $wyniki)
$licznik++

teraz dla każdej interacji $badania dostajesz jedną tablicę $wyniki - następnie do tablicy $wyniki_rozbite z indeksem $licznik zapisujesz tablicę powstałą po explode - dostęp do poszczególnych elementów powinien być przez $wyniki_rozbite[$numeriteracji][$numerelementu]

jak masz wątpliwości, jakie tablice co zwraca, korzystaj często i gęsto z echo czy innego printf który pokaże ci co zawierają poszczególne zmienne, mi tak było zawsze najłatwiej wyłapywać błędy.

15.12.2010
21:06
[13]

kamyk_samuraj [ Legend ]

yasiu -> ja jestem z tych programistów, którzy robią na mikrokontrolerach (ARMach czy Motorolach) i niestety printowanie na ekran jest ograniczone (bo np. urządzenie ekranu nie posiada :)) - zostają pułapki i ręczne sprawdzanie wartości zmiennych na zewnętrznym komputerze. printf to nie dla mnie...
Ewentualnie robię jako admin sieci - tu takżze printf nie obowiązuje...
Dzięki za pomoc

A co do erega - wiem, co zwraca u mnie i co wg manuala zwracać powinien

15.12.2010
21:23
smile
[14]

kamyk_samuraj [ Legend ]

ok - działa. tylko ten ereg został

15.12.2010
21:39
[15]

yasiu [ Legend ]

nie mam jeszcze na laptopie środowiska do php... jutro w razie czego służę pomocą

btw. to mikrokontrolery chodzą pod php? za czasów mojej szkoły średniej katowało się assemblera ew. języki obrazkowe na robotach przemysłowych :D

15.12.2010
21:56
[16]

kamyk_samuraj [ Legend ]

Nie, mikrokontrolery nie chodza pod PHP - i to właśnie tłumaczymoje problemy z PHP :) Po prostu od wielkiego dzwona mam kontakt z czymś innym niż C. Co prawda ARMy (przynajmniej te, na których pracuję) mają tryb Jazelle (natywną obsługę Javy) ale ATMEL chyba o tym zapomniał. Więc wiekszość rzeczy to C.
Assermbler? Można - ale skoro można pisać nawet sterowniki w C, to po co...

15.12.2010
22:05
[17]

yasiu [ Legend ]

nie wiem, to było 15 lat temu :D

15.12.2010
22:26
[18]

msapps [ Pretorianin ]

kamyk, pisalem do ciebie wczoraj na gg, ale nie odpisales

16.12.2010
18:17
[19]

mackie majcher [ Konsul ]

kamyk_samuraj <---

ja jestem z tych programistów, którzy robią na mikrokontrolerach (ARMach czy Motorolach) i niestety printowanie na ekran jest ograniczone (bo np. urządzenie ekranu nie posiada :)) - z


To nie jest tłumaczenie. Skrypt możesz sobie zapuścić na zwykłym kompie i zobaczyć jak wygląda tablica.

© 2000-2024 GRY-OnLine S.A.