![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 14 Dołączył: 2.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Posiadam taki ciąg znaków
Np.
I musiałbym zamienić go na tablicę wielowymiarową
Chodzi o to, że pobieramy cześć ciągu do średnika np a:1; Zamieniamy na element tablicy $t['a']=1 A w przypadku kawałka ciągu d:a:a:5; powinno stworzyć element tablicy $t['d']['a']['a']=5 I w taki sposób stworzyć tą tablicę. Główkuje już ze 2 godziny ale chwilowo nic zensownego nie wymyśliłem. Ciągi mogą być różne ale zawsze elementy rozdzielone są średnikami Jest w stanie ktoś pomóc lub ma jakiś pomysł jak to zrobić? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Rozbijasz sobie ciąg na kolejne elementy (explode) oddzielone średnikiem.
2. Dla każdego elementu z tak otrzymanej tablicy: 2.1. Rozbijasz go względem dwukropka. 2.2. Usuwasz ostatni element tak otrzymanej tablicy zapisując sobie jego wartość (array_pop) - to jest wartość elementu. 2.3. Tworzysz sobie nową referencję do tablicy $t, przykładowo $ref. 2.4. Dla każdego elementu tablicy z punktu 2.2: 2.4.1. Jeżeli nie istnieje $ref[$element] utwórz go jako tablicę. 2.4.2. Ustaw $ref jako referencję do utworzonego powyżej elementu. 2.5. Ustaw wartość z punktu 2.2 do referencji $ref. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 14 Dołączył: 2.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
no to zacząłem tworzyć funkcję pobierającą ciąg $str wg tego co napisałeś.
wszystko było by ok gdyby nie to, że ta funkcja nic nie zwraca, a na logikę powinna zwrócić tablicę. Prawdopodobnie coś pomieszałem z referencją ale coś nie mogę tego znaleźć. Jedyne co się pokazuje to biała strona z tytułem "Nie znaleziono obiektu!". Więc w czym może być problem? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Powinieneś pozbyć się średnika z samego końca wejściowego ciągu (trim).
2. Gdy nadpisujesz referencję $ref (linia #16) powinieneś tworzyć referencję do $ref[$el], nie $t[$el]. http://ideone.com/qZ9io Ten post edytował Crozin 7.05.2012, 14:49:25 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 14 Dołączył: 2.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
dzięki za pomoc (IMG:style_emoticons/default/smile.gif) Działa tak jak powinno.
A tak na marginesie pierwszy raz używałem referencji i funkcji array_pop i trim mimo, że w php siedzę bardzo długo, no ale kiedyś ten pierwszy raz musiał być (IMG:style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
a jeśli chciałbym teraz wygenerowaną tablicę ponownie zamienić w ciąg takich samych znaków to jak się za to zabrać(IMG:style_emoticons/default/questionmark.gif)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tworzysz sobie funkcję rekurencyjną, która zwraca tablicę, gdzie kluczowi (a.b.c.a, a.b.c.b, a.b.c.c...) odpowiada dana wartość. Taka funkcja może wykorzystywać rekurencję do obrabiania kolejnych poziomów tablicy. Pierwszym argumentem funkcji będzie tablica do przetworzenia, drugim natomiast prefix dla kluczy (czyli w tym przypadku: a, następnie a.b, po czym ostateczne a.b.c).
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
no własnie próbuję sobie coś takiego stworzyć ale nie do końca mi to wychodzi.. napiszesz jakiś prosty przykład??
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pokaż co zrobiłeś do tej pory - najlepiej SSCCE.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
działa ok, ale gdy w którym momencie tablica ma więcej niż jeden element to zanika mi prefix, wiem że to nie trudne aby to zrobić ale nie mogę coś na to wpaść.. przy takiej tablicy to co napisałem gubi prefiksy, no bo jak ma nie gubić skoro nie za bardzo jest jak przekazać je wewnętrznym elementom..
pierwszy element jest ok, każdy kolejny gubi wszystko to co było przed nim.. oto efekt: Kod auta:niemieckie:bmw:1=m5
bmw:2=m3 bmw:3=z3 niemieckie:mercedes:1=s class mercedes:2=c klass auta:wloskie:pagani=zonda auta:francuskie:renault=megane francuskie:peugeot=206 Ten post edytował stroju 15.08.2012, 21:56:25 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Trochę przekombinowane, ale byłeś blisko:
Myślę, że różnice w kodzie i wyniku działania funkcji sobie samodzielnie przeanalzujesz. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
no właśnie myślałem o tym, próbowałem podobnie tyle że bez array_merge i tu chyba był mój problem znikających elementów.. przy okazji zapytam, gdzie najlepiej doskonalić właśnie takie braki?? chciałbym się wiele nauczyć tylko ciężko znaleźć źródło wiedzy..
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:57 |