• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozbicie zagnieżdżonej tablicy do określonej formy PHP

Object Storage Arubacloud
0 głosów
342 wizyt
pytanie zadane 2 sierpnia 2017 w PHP przez sc4rface Dyskutant (7,710 p.)

Siema, jestem dosyć świeży w PHP, bardziej przemawia do mnie front-end, ale muszę to wykonać w ramach rozwijania swoich skilli. Tak czy inaczej, potrzebuję rozbić tą tablicę:

    [section] => Array
        (
            [0] => Array
                (
                    ['sectionwidth'] => 525
                    ['sectionheight'] => 500
                    ['bg'] => eaeaea
                    ['sectioncolor'] => c0c0c0
                    ['input'] => Array
                        (
                            [0] => Array
                                (
                                    ['inputtext'] => test
                                    ['inputwidth'] => 505
                                )

                            [3] => Array
                                (
                                    ['inputtext'] => test2
                                    ['inputwidth'] => 505
                                )

                        )

                )

            [1] => Array
                (
                    ['sectionwidth'] => 525
                    ['sectionheight'] => 500
                    ['bg'] => 222222
                    ['sectioncolor'] => ffffff
                    ['input'] => Array
                        (
                            [1] => Array
                                (
                                    ['inputtext'] => test3
                                    ['inputwidth'] => 505
                                )

                            [2] => Array
                                (
                                    ['inputtext'] => test4
                                    ['inputwidth'] => 505
                                )

                        )

                )

        )

Do takiej formy ostatecznej, jak mogę to zrobić?

<div style="width: '.$sectionwidth.'px; height: '.$sectionheight.'px; background: #'.$bg.'; color: '.$sectioncolor.'"><p style="width: '.$inputwidth.'px;">'.$inputtext.'</p></div>

Używając foreach'a na wartościach podzbioru input, otrzymuję informację, że próbuję zamienić tablicę na string.

1 odpowiedź

0 głosów
odpowiedź 2 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Jeśli dobrze odczytałem tablicę i dobrze rozumiem to co chcesz zrobić: https://3v4l.org/6iR4k - tak na szybko.

Można to sobie oczywiście zrobić czytelniej, inaczej ponazywać, albo np. przypisać do konkretnych zmiennych przez list() jeśli potrzebujesz.
komentarz 2 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
Nie do końca taki efekt miałem w zamiarach - bo sposób podany przez Ciebie może działać, w przypadku, gdy zmienne tablicowe są stałe i znam ich ilość. Tutaj jednak wszystko generuję dynamicznie, za pomocą JS'a i zmienne przekazuję za pomocą hiddeninputa do PHP.
komentarz 2 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Ilość czego? Ilość sekcji i inputów może być przecież różna. Pokaż może przykładowe tablice, które nie zadziałają na tym, może tak lepiej zrozumiem.
komentarz 2 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
https://jsfiddle.net/mujc9qxb/

Tak wygląda generowanie wartości w JS, przekazywanych później do PHP, na które właśnie składa się ta tablica. Jak sam widzisz - nie wiadomo tak defacto ile będzie sekcji i inputów, dlatego też Twój kod, który co prawda działa na sztywno określonych wartościach tablicy, to już dynamicznie nie będzie się zachowywał okej.

Zależy mi w głównej mierze na tym, żeby właśnie działo się to dynamicznie. Po stronie JS'a wszystko generuje się si, teraz tylko przetworzyć to w PHP, do czego już niestety nie mam takiego skilla.
komentarz 2 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)

Em?

nie wiadomo tak defacto ile będzie sekcji i inputów, dlatego też Twój kod, który co prawda działa na sztywno określonych wartościach tablicy, to już dynamicznie nie będzie się zachowywał okej. 

Ilość sekcji i inputów może być przecież różna 

Albo ja czegoś nie rozumiem, albo ty nie rozumiesz :P

https://3v4l.org/NeIO5 - dodałem teraz kilka sekcji i inputów w każdej, kod na dole się oczywiście ani jednym znakiem nie zmienił. W generowanym HTMLu się te sekcje i input zawierają, więc co jeszcze jest nie tak?

komentarz 2 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
No właśnie o to mi chodzi, że tworzysz $sections - manualnie, a nie dynamicznie. $sections ma być generowane na podstawie danych przesłanych z JS'a, o to chodzi.
komentarz 2 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Och, no to trochę inna sprawa. Jak chcesz przesłać te dane z JSa do PHP? Bo teraz widzę tylko kod generujący HTML i wstawiający na stronę. Ajax? Jeśli tak to przesyłał będziesz na raz kilka elementów do PHP czy po jednym? Jeśli po jednym to wcześniejsze muszą być gdzieś zapisywane (baza, plik etc).

Moja odpowiedź była taka, bo w pytaniu nie wspomniałeś nic o przesłaniu tego z JSa i dynamicznym generowaniu, a tylko rozkodowaniu tablicy.
komentarz 2 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)

Jak chcę przesłać? Przesyłam za pomoca hidden inputów, z tego co pisali na stacku to dosyć częsta praktyka i przydatna w przypadku, kiedy masz do przesłania tylko wartości zmiennych. 

<input type="hidden" name="section[' + sectionid + '][\'sectionwidth\']" value="' + sectionwidth + '" /> <input type="hidden" name="section[' + sectionid + '][\'sectionheight\']" value="' + sectionheight + '" /> <input type="hidden" name="section[' + sectionid + '][\'bg\']" value="' + bg + '" /> <input type="hidden" name="section[' + sectionid + '][\'sectioncolor\']" class="sectioncolor" value="' + sectioncolor + '" /> <input type="hidden" class="sectionid" name="sectionid" value="' + sectionid + '" />

 

komentarz 2 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)

Okej, no to na moje oko wystarczy po prostu podstawić $_POST['section'] (bo jak rozumiem przesyłasz to później przez POST jako formularz) do pierwszego foreach i będzie działać.

https://3v4l.org/ZAl21

Co do samego przesyłu to zastanawiam się jeszcze czy oby na pewno nazwy kluczy powinny być w ', np. jak tu bg

name="section[' + sectionid + '][\'bg\']

Jeśli nie podziała spróbuj we wszystkich bez, o tak

name="section[' + sectionid + '][bg]
komentarz 2 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)

Jest problem tylko takiej maści, że jak usunę to: 

$_POST['sections'] = [
    [
        'sectionwidth' => 525,
        'sectionheight' => 500,
        'bg' => 'eaeaea',
        'sectioncolor' => 'c0c0c0',
        'input' => [
            [
                'inputtext' => 'test',
                'inputwidth' => 505
            ],
            [
                'inputtext' => 'test2',
                'inputwidth' => 505
            ]
        ]
    ],
    [
        'sectionwidth' => 525,
        'sectionheight' => 500,
        'bg' => '222222',
        'sectioncolor' => 'ffffff',
        'input' => [
            [
                'inputtext' => 'test3',
                'inputwidth' => 505
            ],
            [
                'inputtext' => 'test4',
                'inputwidth' => 505
            ]
        ]
    ],
];

Nie wiem jak mam Ci to wyjaśnić, żebyś zrozumiał o co mi dokładnie chodzi - wartości nie mogą być przypisane statycznie.

komentarz 2 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)

No rozumiem, dlatego pytałem jak przesyłasz dane. Powiedziałeś, że ukrytymi inputami, więc rozumiem że jako formularz wysyłasz do skryptu PHP, tak? Jeśli tak, to w skrypcie PHP automatycznie dostaniesz prawie taką samą tablicę jak tą, którą ja generuje statycznie.

Aż pofatygowałem się i zrobiłem mały test: http://others.waluk.pl/forum/form.html - tu jest podstawiony jakiś wycinek HTMLa z ukrytymi inputami, wygenerowany przez JS z Codepena (nie chciało mi się już przenosić go do siebie). Po kliknięciu przycisku "wyslij" idzie to do pliku php w którym jest taki kod:

<?php

echo '<pre>';
var_dump($_POST['section']);
echo '</pre>';

foreach ($_POST['section'] as $section) {
    echo '<div style="width: '.$section['sectionwidth'].'px; height: '.$section['sectionheight'].'px; background: #'.$section['bg'].'; color: '.$section['sectioncolor'].'">';
    foreach ($section['input'] as $input) {
        echo '<p style="width: '.$input['inputwidth'].'px;">'.$input['inputtext'].'</p>';
    }
    echo '</div>';
}

A więc nie ma tu nic statycznego, w form.html jest tylko kod, który generuje Twój JS.

komentarz 3 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
Ale przecież załączyłem w pierwszym swoim poście, jaką tablicę otrzymuję po przesłaniu formularza do PHP. Prawie taką samą, co nie znaczy taką samą - więc nie ma to prawa działać, niestety.
komentarz 3 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)

To wybacz, ale niestety nadal nie rozumiem.

Wrzuciłem teraz tutaj nawet Twojego JSa: http://others.waluk.pl/forum/form.html (jedyne co zmieniłem to usunąłem apostrofy, czyli zmiana np. z [\'bg\'] na [bg], tak jak mówiłem wyżej i dodałem formularz z guzikiem aby dało się wysłać). I działa, po dodaniu i kliknięciu wyślij PHP generuje odpowiednią tablicę oraz kod HTML. Możesz dodać ile sekcji chcesz i ile inputów chcesz.

Jeśli to nie to, to więcej nie jestem prawdopodobnie w stanie pomóc, wybacz.

komentarz 3 sierpnia 2017 przez sc4rface Dyskutant (7,710 p.)
Racja, działa - wybacz. Wciąż mówiliśmy o tym samym, aczkolwiek moim błędem było to, że nie usunąłem \' z kodu :D
komentarz 3 sierpnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Heh, mówiłem o tym już dużo wyżej. Ale ok, miło że wreszcie działa.

Podobne pytania

0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 22 października 2015 w PHP przez ukasz112 Początkujący (390 p.)
0 głosów
1 odpowiedź 1,165 wizyt
pytanie zadane 30 lipca 2019 w JavaScript przez niezalogowany
+1 głos
0 odpowiedzi 313 wizyt
pytanie zadane 28 sierpnia 2018 w JavaScript przez jaco Początkujący (290 p.)

92,615 zapytań

141,465 odpowiedzi

319,780 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...