Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Konwersja tablicy
Forum PHP.pl > Forum > Przedszkole
flymo
Witam

Mam tablicę pobraną z pliku:
  1. $file = file('memory.txt');
  2.  
  3. (
  4. [0] => d3 ea d3 e9 d3 e8 d3 e7 d3 ea d3 e9 d3 e9 d3 e8
  5. [1] => d3 e7 d3 e7 d0 00 d0 00 d0 00 d0 00 d0 00 d0 00
  6. [2] => d0 00 d0 00 d0 00 d0 00 d0 00 d0 00 d0 00 d1 00
  7. [3] => d1 00 d1 00 d1 00 d1 00 d1 00 d1 00 d1 00 d1 00
  8. [4] => d1 00 d1 00 d1 00 d1 00 d1 00 d1 00 d1 00 d1 00
  9. [5] => d1 00 d1 00 d1 00 d1 00 d1 01 d1 00 d1 08 d1 08
  10. )


Chciałbym ją przekonwertować aby efekt był taki
  1. $tab[0][0] //zawiera d3ea
  2. $tab[0][1] //zawiera d3e9
  3. $tab[0][2] //zawiera d3e8
  4. .
  5. $tab[1][0] //zawiera d3e7
  6. $tab[1][1] //zawiera d3e7


Jak można to zrobićquestionmark.gif bardzo proszę o pomoc.
Kshyhoo
Może przeleć w pętli tak:
  1. $data = implode(" ", $data);


EDIT: powinno być explode()
ethann
@up
implode() złącza tablicę


jak powiedział kolega wyżej, użyj pętli i zawierz w niej funkcję explode().
np.
  1. $countfile = count($file);
  2. $data = array();
  3. for($i=0; $i<$countfile; $i++) {
  4. $data[$i] = explode(" ", $file[$i]);
  5. }




@down
znak, że święta udane smile.gif
Kshyhoo
Cytat(ethann @ 9.04.2012, 10:07:12 ) *
@up
implode() złącza tekst

No jasne, udzielił mi się świąteczny nastrój brzydal.gif
flymo
Dzięki za odpowiedzi wcześniej kombinowałem z tym explode ale nie do końca udało mi się osiągnąć zamierzony efekt
spróbowałem kod napisany przez @ethann
efekt jest taki:
  1.  
  2. (
  3. [1] => Array
  4. (
  5. [0] => d3
  6. [1] => ea
  7. [2] => d3
  8. [3] => e9
  9. [4] => d3
  10. [5] => e8
  11. [6] => d3
  12. [7] => e7
  13. [8] => d3
  14. [9] => ea
  15. [10] => d3
  16. [11] => e9
  17. [12] => d3
  18. [13] => e9
  19. [14] => d3
  20. [15] => e8
  21. [16] =>
  22.  
  23. )
  24.  
  25. [2] => Array
  26. (
  27. [0] => d3
  28. [1] => e7
  29. [2] => d3
  30. [3] => e7
  31. [4] => d0
  32. [5] => 00
  33. [6] => d0
  34. [7] => 00
  35. [8] => d0
  36. [9] => 00
  37. [10] => d0
  38. [11] => 00
  39. [12] => d0
  40. [13] => 00
  41. [14] => d0
  42. [15] => 00
  43. [16] =>
  44.  
  45. )
  46.  


i jest już prawie ok smile.gif chciałbym jeszcze scalić elementów tablicy na zasadzie:
[0]=>d3ea
[1]=>d3e9
[2]=>d3e8

czy trzeba przepisać tą tablicę na nowo? czy skrócić /2 i jakoś zaktualizować elementy?
Kshyhoo
Bo każda linia jest tablicą złożoną ze znaków zawierającą spacje. Wystarczy je usunąć w jakikolwiek sposób:
  1. $uchwyt = @fopen("memory.txt", "r");
  2. if ($uchwyt) {
  3. while (($bufor = fgets($uchwyt, 4096)) !== false) {
  4. $n = count($bufor);
  5. for ($i=0;$i<$n; $i++)
  6. $bufor = str_replace(' ', '', $bufor);
  7. echo $bufor.'<br />';
  8. }
  9. if (!feof($uchwyt)) {
  10. echo "Błąd: niespodziewany błąd fgets()\n";
  11. }
  12. fclose($uchwyt);
  13. }

Wynik:
Kod
d3ead3e9d3e8d3e7d3ead3e9d3e9d3e8
d3e7d3e7d000d000d000d000d000d000
d000d000d000d000d000d000d000d100
d100d100d100d100d100d100d100d100
d100d100d100d100d100d100d100d100
d100d100d100d100d101d100d108d108

A jeśli chcesz uzyskać np. dwa pierwsze elementy, to trzeba to przekonwertować na tablicę i wyświetlić:
  1. $uchwyt = @fopen("memory.txt", "r");
  2. if ($uchwyt) {
  3. while (($bufor = fgets($uchwyt, 4096)) !== false) {
  4. $bufor = explode(" ", $bufor);
  5. echo $bufor[0].$bufor[1].'<br />';
  6. }
  7. if (!feof($uchwyt)) {
  8. echo "Błąd: niespodziewany błąd fgets()\n";
  9. }
  10. fclose($uchwyt);
  11. }

Wynik:
Kod
d3ea
d3e7
d000
d100
d100
d100

Czyli dwa pierwsze elementy tablicy...
ethann
albo do tego co już masz dopisz 2 pętle na końcu, czyli połączyć ze sobą każde 3 kolejne elementy.
  1. $countdata = count($data);
  2. $newdata = array();
  3. for($i=0; $i<$countfile; $i++) {
  4. for($j=0; $j<$countdata; $j+=3) {
  5. $newdata[$i][$j/3] = $data[$i][$j].$data[$i][$j+1].$data[$i][$j+2];
  6. }
  7. }


postanowiłem zrobić to samo na szybko:
  1. <?php
  2. $file = file('file.txt');
  3. for($i=0; $i<$countfile; $i++) {$file[$i] = trim($file[$i]);}
  4. $countfile = count($file);
  5. //var_dump($file);
  6. $data = array();
  7. foreach($file as $k => $v) {$data[$k] = explode(' ', $v);}
  8. $countdata = count($data);
  9. //var_dump($data);
  10. $newdata = array();
  11. for($i=0; $i<$countfile; $i++) {
  12. for($j=0; $j<$countdata; $j+=3) {
  13. $newdata[$i][$j/3] = $data[$i][$j].$data[$i][$j+1].$data[$i][$j+2];
  14. }
  15. }
  16.  
  17. var_dump($newdata);
  18. ?>



#edit
Kod nie posiada zabezpieczeń czyli jak masz włączone warningi to możesz się niemile zaskoczyć w przypadku nieodpowiedniej ilości wyników w linii. Głównie chodzi o ten fragment:
  1. $newdata[$i][$j/3] = $data[$i][$j].$data[$i][$j+1].$data[$i][$j+2];
flymo
Dopasowałem kod do moich potrzeb:

  1. $uchwyt = @fopen("mem.txt", "r");
  2. if ($uchwyt) {
  3. $a=0;
  4. $tab = array();
  5. while (($bufor = fgets($uchwyt, 4096)) !== false) {
  6. $bufor = explode(" ", $bufor);
  7. if($a!=0 && $a!='33'){
  8. $tab[]=$bufor[0].$bufor[1];
  9. $tab[]=$bufor[2].$bufor[3];
  10. $tab[]=$bufor[4].$bufor[5];
  11. $tab[]=$bufor[6].$bufor[7];
  12. $tab[]=$bufor[8].$bufor[9];
  13. $tab[]=$bufor[10].$bufor[11];
  14. $tab[]=$bufor[12].$bufor[13];
  15. $tab[]=$bufor[14].$bufor[15];
  16. }
  17. $a++;
  18. }
  19. if (!feof($uchwyt)) {
  20. echo "Błąd: niespodziewany błąd fgets()\n";
  21. }
  22. fclose($uchwyt);
  23. }
  24. echo "<pre>";
  25. print_r ($tab);


zwraca:

  1. (
  2. [0] => d3ea
  3. [1] => d3e9
  4. [2] => d3e8
  5. [3] => d3e7
  6. [4] => d3ea
  7. [5] => d3e9
  8. [6] => d3e9
  9. [7] => d3e8
  10. [8] => d3e7
  11. [9] => d3e7
  12. [10] => d000
  13. [11] => d000
  14. [12] => d000
  15. [13] => d000
  16. ...
  17. [255] => 0cf8
  18. }


Dzięki wszystkim za pomoc!!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.