![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Załóżmy, że mamy wielowymiarową tablicę, której struktury do końca nie znamy. Korzysta z niej kilka innych obiektów, mogą one wstawiać do tej tablicy wartości pod odpowiednimi indeksami, ale i też je wyciągać (zakładamy, że nigdy nikt sobie na wzajem danych nie nadpisze). Ale ta tablica ma być "zarządzalna" przez osobny obiekt. To znaczy, by pobrać jakąś wartość trzeba użyć metody $object->get('index'), a żeby wstawić $object->set('index', 2). Nigdy nie ma bezpośredniego dostępu do tej tablicy.
Jak wykonać metody pobierania i wstawiania do tablicy, by były możliwie jak najszybsze (operacje na stringach to jakaś masakra w PHP ;/) i żeby można było dostać się do tablicy wgłąb, na przykład: $table['index1']['index2']['index3']? Wymyśliłem, by na poczekaniu tworzyć funkcję anonimową (create_function), której prześlemy całą tablicę, a w stringu stworzymy już indeks do pobrania:
I teraz, jeśli chcemy pozyskać jakąś wartość to w parametrze metody podajemy ciąg znaków: 'index1.index2.index3'. Ale nie jest to zbyt szybkie. Macie może inne pomysły na rozwiązanie tego problemu? Ten post edytował adbacz 9.07.2014, 23:26:52 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
Ma to być prosta klasa, która będzie czymś na zasadzie pamięci podręcznej ustawień w systemie. Teraz mam wszystko podzielone ładnie na pliki, które są w różnych formatach i w różnych miejscach, ale chciałbym to przyśpieszyć. Wrzucę wszystko do pliku w formacie PHP w formie tablicy i będę tym zarządzał za pomocą klasy. Oczywiście "wrzucę" nie ręcznie, tylko skryptem, w tedy gdy dany plik konfiguracyjny został odświeżony lub gdy jeszcze nie został dodany do globalnego. Chodzi mi po prostu o przyśpieszenie operacji na ustawieniach aplikacji.
EDIT. Różnica pomiędzy moim pomysłem z funkcją anonimową a pomysłem @by_ikar jest rzędu ok 0.02 sekundy, na 1000 wywołań. Wywołanie moje:
Wywołanie @by_ikar:
Zaletą tego pierwszego jest to, że nawet gdy podam jako argument 'kernel.framework', to zwróci mi to tablicę jeśli ona tam jest, a w drugim przypadku zwróci mi obiekt. Musiałbym zastosować dodatkowy drugi argument funkcji, w którym definiowałbym, czy metoda get() ma zwrócić mi obiekt czy samą tablicę (w tym przypadku). Pytanie, czy przy 1000 wywołań, narzut na poziomie 0.02 sekundy jest możliwy do zaakceptowania? Biorąc pod uwagę to, że troszke lepiej można operować na zwróconych danych. Ten post edytował adbacz 13.07.2014, 09:31:42 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 01:36 |