Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodawanie klucza do tablicy wraz z wartością
Forum PHP.pl > Forum > PHP
Liko
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.
kszychu
A może najprościej: zamień kropki na '][', dodaj na początku [' a na końcu '] i już masz gotowy element tablicy.
Liko
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ć.
bendi
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
                        )

                )

        )

)
Liko
@Bendi: jak będziesz w Szczecinie zgłoś się do mnie. Wypad do pubu.
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.