Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tablica wielowymiarowa, Problem z zapisem danych
heniek87
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.06.2011

Ostrzeżenie: (0%)
-----


Witam!
Mam tu tablicę wielowymiarową
  1. $arr = array(
  2. 1 => array(
  3. 1 => '1.1',
  4. 2 => array(
  5. 1 => 'tekst przed',
  6. 2 => array(
  7. 1 => '1.2.2.1',
  8. 2 => 8
  9. ),
  10. 3 => array(
  11. "cos" => '1.2.3',
  12. 2 => "cos innego",
  13. 3 => 8
  14. )
  15. )
  16. ),
  17. 2 => array(
  18. 1 => '2.1',
  19. 2 => 6
  20. ),
  21. 3 => array(
  22. 1 => '3.1',
  23. 2 => array(
  24. "cos" => '3.2.1',
  25. 2 => 9,
  26. 3 => 8
  27. )
  28. )
  29. );

Mój problem polega na tym że chciałbym odczytywać i edytować taką tablicę, lecz nie sposobem:
  1. echo $arr[1][2][1];
  2. $arr[1][2][1]='tekst po';

lecz;
mając zmienną np;
  1. $sciezka="1.2.1";
  2. $arr[$sciezka]='tekst po'; //powinno się odnosić do $arr[1][2][1];
  3. //oczywiście powyższy fragment kodu nie będzie działał

z odczytem sobie poradziłem, gorzej z zapisem w określonym miejscu.
Porszę o pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wizu
post
Post #2





Grupa: Zarejestrowani
Postów: 127
Pomógł: 15
Dołączył: 16.02.2008
Skąd: Sanok

Ostrzeżenie: (0%)
-----


Najwygodniej będzie ci to zrobić obudowując tablicę klasą implementującą interfejs ArrayAcces, prosta i ładna (IMG:style_emoticons/default/smile.gif) implementacja na szybko, powinna działać:
  1. class ArrayTest implements ArrayAccess
  2. {
  3. private $array;
  4.  
  5. public function __construct(&$array)
  6. {
  7. $this->array = $array;
  8. }
  9.  
  10. public function offsetUnset($offset)
  11. {
  12. //unset
  13. }
  14.  
  15. public function offsetSet($offset, $value)
  16. {
  17. $parts = explode('.', $offset);
  18. $tab = &$this->array;
  19. foreach($parts as $part)
  20. if(isset($tab[$part]))
  21. $tab = &$tab[$part];
  22. else
  23. break;
  24. $tab = $value;
  25. }
  26.  
  27. public function offsetGet($offset)
  28. {
  29. $parts = explode('.', $offset);
  30. $tab = &$this->array;
  31. foreach($parts as $part)
  32. if(isset($tab[$part]))
  33. $tab = $tab[$part];
  34. else
  35. break;
  36.  
  37. return $tab;
  38. }
  39.  
  40. public function offsetExists($offset)
  41. {
  42. // isset
  43. }
  44. }
  45.  
  46.  
  47. $array = array(
  48. array(1, 2, array(3, 4, array(5, 6))),
  49. array(7, 8, array(9, 10, array(11, 12)))
  50. );
  51.  
  52. $interArray = new ArrayTest($array);
  53. echo $interArray['1.2.2.0'], '<br />';
  54. $interArray['1.2.2.0'] = 15;
  55. echo $interArray['1.2.2.0'];


Ten post edytował wizu 20.09.2011, 11:59:47
Go to the top of the page
+Quote Post
heniek87
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.06.2011

Ostrzeżenie: (0%)
-----


Cytat(wizu @ 20.09.2011, 12:58:55 ) *
Najwygodniej będzie ci to zrobić obudowując tablicę klasą implementującą interfejs ArrayAcces, prosta i ładna (IMG:style_emoticons/default/smile.gif) implementacja na szybko, powinna działać:
  1. class ArrayTest implements ArrayAccess
  2. {
  3. private $array;
  4.  
  5. public function __construct(&$array)
  6. {
  7. $this->array = $array;
  8. }
  9.  
  10. public function offsetUnset($offset)
  11. {
  12. //unset
  13. }
  14.  
  15. public function offsetSet($offset, $value)
  16. {
  17. $parts = explode('.', $offset);
  18. $tab = &$this->array;
  19. foreach($parts as $part)
  20. if(isset($tab[$part]))
  21. $tab = &$tab[$part];
  22. else
  23. break;
  24. $tab = $value;
  25. }
  26.  
  27. public function offsetGet($offset)
  28. {
  29. $parts = explode('.', $offset);
  30. $tab = &$this->array;
  31. foreach($parts as $part)
  32. if(isset($tab[$part]))
  33. $tab = $tab[$part];
  34. else
  35. break;
  36.  
  37. return $tab;
  38. }
  39.  
  40. public function offsetExists($offset)
  41. {
  42. // isset
  43. }
  44. }
  45.  
  46.  
  47. $array = array(
  48. array(1, 2, array(3, 4, array(5, 6))),
  49. array(7, 8, array(9, 10, array(11, 12)))
  50. );
  51.  
  52. $interArray = new ArrayTest($array);
  53. echo $interArray['1.2.2.0'], '<br />';
  54. $interArray['1.2.2.0'] = 15;
  55. echo $interArray['1.2.2.0'];

Wiedziałem że będę musiał obiekty robić, raczkuje w tym jeszcze. W tym gotowcu co podałeś jak załączę swoją tablicę to przy zmianie wartości wywala mi błąd

Fatal error: Cannot create references to/from string offsets nor overloaded objects in /********/test.php on line 22

w twoim przykładzie jest to 21 wers
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 20:15