Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] array
Forum PHP.pl > Forum > PHP
soliniak
Witam,

Mam plik lang_polski.php w nim:
  1. <?php
  2.  
  3. global $lang;
  4. $lang = array(
  5.  
  6. "charset" => "utf-8",
  7.  
  8. "help" => "Pomoc",
  9. "all_doctors" => "Wszyscy lekarze"
  10.  
  11. );
  12.  
  13. ?>

Teraz mam pytanie, chciałbym wyciągnąć informacje z tej tablicy i móc je edytować.
Póki co zrobiłem coś takiego (tylko wyświetlanie).
index.php:

  1. <table>
  2. <?php
  3.  
  4. include lang_polski.php;
  5.  
  6. foreach ($lang as $klucz => $wartosc){
  7.  
  8. echo "<tr><td>" .$klucz ."</td> <td><input type='text' value='". $wartosc ."' ></td><td><button value='zapisz'>zmien</button></td></tr>";
  9. }
  10. ?>
  11. </table>



i nie wiem co dalej z tym zrobić...
Ma ktoś jakieś pomysły?? arrowheadsmiley.png


markuz
Myślałeś nad bazą danych?
soliniak
Tak, myślałem, ale póki co i o ile się da to chciałbym tego uniknąć.
Jeśli się nie da to będę musiał kod zmienić pod bazę danych.
Pyton_000
siakoś tak:
  1. file_put_contents('lang.php', "<?php\n global \$lang; \n \$lang = " . var_export($to_co_edytujesz_czyli_tablica));


Tylko nie wiem czy się nie wysypie przy <?php
Dejmien_85
Ja ma 2 propozycje:

1. Jeśli masz troszkę więcej czasu - Baza danych SQLite 3 - to baza danych zapisana w pliku, także żadnego serwera MySQL nie potrzebujesz. Po prostu zapiszujesz plik baza.sql i później na nim operujesz (to takie urposzczone MySQL).
2. Jeśli nie chcesz bawić się z bazą, wtedy proponuję zapisać pliki językowa jako plik w rozszerzeniu JSON - PHP-owa serializacja jest zbędna, ponieważ przy tłumaczeniach nie potrzeba żadnych meta danych.

  1. // Stwórz sobie obiekt/tablicę, np.
  2. $lang = array(
  3. "charset" => "utf-8",
  4. "help" => "Pomoc",
  5. "all_doctors" => "Wszyscy lekarze"
  6. );
  7.  
  8. // konwersja na JSON-a
  9. $langJson = json_encode($lang);
  10.  
  11. // zapisz dane do pliku lang_polski.json (rozszerzenie może być dowolne, jednak zalecam JSON, bo później możesz sobie to otworzyć przy pomocy IDE/edytora i będziesz miał pokolorowaną składnię)
  12. file_put_contents('lang_polski.json', $langJson);


I później jeśli będziesz chciał coś zmienić, wtedy wczytujesz plik, zmieniasz wartości i zapisujesz ponownie

  1. // wczytaj dane z pliku
  2. $langJson = file_get_contents('lang_polski.json');
  3.  
  4. // konwersja na tablicę PHP (bez drugiego parametru "false" otrzymałbyś obiekt)
  5. $lang = json_decode($langJson, true);
  6.  
  7. // i tutaj operujesz sobie na tablicy, wyświetlasz, zmieniasz dane itd...
  8. ...
  9.  
  10. // gdy już zrobisz co chcesz wtedy w przypadku zmian możesz napisać plik z tłumaczeniami (albo do tego samego, albo do innego pliku)
  11. $langJson = json_encode($lang);
  12. file_put_contents('lang_polski.json', $langJson);

Możesz także wykorzystać do zapisywania pliki płaskie (.ini), albo xml, lub ewentualnie YAML (ale tutaj musiałbyś wykorzystać bibliotekę jakąś, bo YAML nie jest standardowo obsługiwany przez PHP).

Moim zdaniem do Twoich finezyjnych zabiegów najprostszy sposób to JSON. ; )

PS Ogólnie to postaraj się oddzielić logikę od widoku, bo widzę tam mały miszmasz. wink.gif
soliniak
Też mi się spodobał pomysł z JSON.
Co rozumiesz przez "oddzielić logikę o dwidoku"? Nie mam jak oddzielić tej tabeli? tongue.gif


Zrobiłem coś takiego:

  1. <center>
  2. <br /><br /><br /><br />
  3. <?php
  4.  
  5.  
  6. $langJson = json_encode($lang);
  7.  
  8. $langJson = file_get_contents('lang_polski.json');
  9.  
  10. $lang = json_decode($langJson, true);
  11.  
  12.  
  13. ?>
  14.  
  15. <table>
  16. <?
  17.  
  18.  
  19. foreach ($lang as $klucz => $wartosc){
  20.  
  21. echo "<tr><td>" .$klucz ."</td> <td><input type='text' value='". $wartosc ."' ></td></tr>";
  22.  
  23.  
  24. $index = array_search($wartosc, $lang);
  25.  
  26. array_splice($lang, $index, 1, array('mygreeen'));
  27.  
  28. echo $index; // zwraca nazwę nie liczbę
  29.  
  30.  
  31. }
  32.  
  33. ?>
  34.  
  35. </table>
  36.  
  37. <?
  38.  
  39.  
  40. $langJson = json_encode($lang);
  41. file_put_contents('lang_polski.json', $langJson);
  42.  
  43. ?>
  44.  
  45.  
  46. </center>
  47.  


I tutaj się zaciąłem.
Nie mogę się odwołać do wartości klucza bo klucz z tego co zrozumiałem nie jest cyfrą.
Tak wygląda array:
  1. (
  2. [charset] => utf-8
  3. [help] => Pomoc
  4. [colXs] => foobar34
  5. [all_doctors] => Wszyscy lekarze
  6. )


Jak np. zmienić wartość klucza charset??
Próbowałem użyć funkcji array_insert ale również nie daje pożądanych rezultatów.

(BTW Mam w planach dorobić do tego potem formularz)


[EDIT]

Okazuje się że było to prostsze niż sądziłem wink.gif
Wystarczy zrobić o tak:
  1. foreach ($lang as $klucz => $wartosc){
  2.  
  3. echo "<tr><td>" .$klucz ."</td> <td><input type='text' value='". $wartosc ."' ></td></tr>";
  4. $lang[$klucz] = "test";
  5.  
  6. }


Już nie będę usuwał tego postu, może się komuś przyda albo będzie miał lepsze rozwiązanie wink.gif
Dejmien_85
Cytat(soliniak @ 5.02.2015, 14:56:56 ) *
Już nie będę usuwał tego postu, może się komuś przyda albo będzie miał lepsze rozwiązanie wink.gif


Do przechowywania i edycji danych używa się baz danych, także działaj choćby z tym SQLite 3, nauczysz się języka SQL i wykorzystasz to w przyszłości.

Używanie JSON, XML, YAML, czy .INI jako bazy danych to taki mały hack - tak się nie robi (choć są wyjątki, np. QuickCMS - ale ograniczenia są mega w porównaniu do baz danych).

Także działaj z SQLite 3 (albo MySQL - jeśli siedzisz na Windzie, to na pewno masz XAMPPa lub WAMPa, a tam jest cały zestaw gotowy do użytku).

Nie bój się baz! To Twoi przyjaciele, tylko jeszcze o tym nie wiesz. ; )
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.