Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dodawanie klucza do tablicy wraz z wartością
Liko
post 11.08.2005, 08:11:00
Post #1





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


Jestem w trakcie tworzenie pewnego skryptu, który przechowuje dane w pewnej tablicy(skrypt tak żeby coś sprawdzić a nie użytkowy). Napotkałem na problem przy dodawaniu wartości do tablicy.

Kod
bool set ( string key, mixed value )


Tak wygląda używanie tej funkcji:
  1. <?php
  2. set( 'key1.key2.key3.key4', $value );
  3. ?>


Teraz funkcja rozbija klucz na cześci po kropce. Następnie musi przeszukać tablice, która jest wielowymiarowa i dodawać wartość. Tutaj zaczyna sie problem. Nie wiem jak sobie poradzić z tym szukaniem. Tablica obecnie wygląda tak:

Kod
array
  'key1' =>
    array
      'key2' =>
        array
          'key3' =>
            array
  'key2' =>
    array
      'key3' =>
        array
          'key1' =>
            array


Dodane wartość musi być w: array['key1']['key2']['key3']['key4'] = wartosc;

Czekam na pomysły, nie na gotowy kod. Spędziłem nad tym dobre 3 godziny od 6 rano.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
kszychu
post 11.08.2005, 08:14:31
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


A może najprościej: zamień kropki na '][', dodaj na początku [' a na końcu '] i już masz gotowy element tablicy.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Liko
post 11.08.2005, 08:17:46
Post #3





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


No właśnie tak już robiłem. No i jakoś nie moglem doiść do tego. Ponieważ wywało mi
Cytat
Notice: Undefined variable: $arrTemp['key1']['key2']['key3']['key4']


Brał to jako zmienną tak nazwaną, a nie jako tablice. Probowałem evalować, ale efekt był podobny.

PS: Może poprostu jestem przemęczony? Jednak siedze od 5 rano, spałem mało, ale póki tego nie skończe nie pojde spać.
Go to the top of the page
+Quote Post
bendi
post 11.08.2005, 09:42:58
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


No to moze tak:
  1. <?php
  2. //set( 'key1.key2.key3.key4', $value );
  3. $ar = array();
  4. $ar['key1']= array();
  5. $ar['key1']['key2'] = array();
  6. $ar['key1']['key2']['key3'] = array();
  7.  
  8. function set( &$aTemp, $keys, $value ) {
  9. $keys = explode( '.', $keys );
  10. foreach( $keys as $i => $k ) {
  11. if( empty( $aTemp[$k] ) ) {
  12. if( $i == count( $keys )-1 ) {
  13. //dodaj wartosc
  14. $aTemp[$k] = $value;
  15. break;
  16. }
  17. else {
  18. //wstaw nowy element w srodku sciezki jezeli nie istnieje
  19. $aTemp[$k] = array();
  20. //i przepisz go jako current element
  21. $aTemp = &$aTemp[$k];
  22. }
  23. }
  24. else {
  25. $aTemp = &$aTemp[$k];
  26. }
  27. }
  28. }
  29.  
  30. set( $ar, 'key1.key2.key3.key4', 'bla bla' );
  31.  
  32. print_r( $ar );
  33. ?>

Wypisze
Kod
Array
(
    [key1] => Array
        (
            [key2] => Array
                (
                    [key3] => Array
                        (
                            [key4] => bla bla
                        )

                )

        )

)


--------------------
Go to the top of the page
+Quote Post
Liko
post 11.08.2005, 10:02:09
Post #5





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


@Bendi: jak będziesz w Szczecinie zgłoś się do mnie. Wypad do pubu.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 05:49