Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[php] filtrowanie tablicy przez drugą tablicę

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

[php] filtrowanie tablicy przez drugą tablicę

Post 20.10.2016, 07:21:56

Witam Wszystkich,

Po wielu poszukiwaniach na forum postanowiłem poprosić o pomoc bo ciężko postawić mi kolejny krok, a sprawa wygląda tak:
Loguję się do użytkownika i dostaję tablicę z dostępami zapisaną w stringu (1,2,3,4,5,6,7,8,9).
String zamieniam na tablicę dostępów użytkownika:
Kod: Zaznacz cały
Array
(   [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
)

Daną tablicę chcę porównać z tablicą uprawnień:
Kod: Zaznacz cały
Array
(
    [1] => Array
        (   [ind] => 1
            [link] => linki/a.php
            [opis] => aba
        )
    [2] => Array
        (   [ind] => 2
            [link] => linki/b.php
            [opis] => abb
        )
    [3] => Array
        (   [ind] => 3
            [link] => linki/c.php
            [opis] => abc
        )
    [4] => Array
        (   [ind] => 4
            [link] => linki/d.php
            [opis] => abd
        )
    [5] => Array
        (   [ind] => 5
            [link] => linki/e.php
            [opis] => abe
    [6] => Array
        (   [ind] => 6
            [link] => linki/f.php
            [opis] => abf
        )
    [7] => Array
        (   [ind] => 7
            [link] => linki/g.php
            [opis] => abg
        )
    [8] => Array
        (   [ind] => 8
            [link] => linki/h.php
            [opis] => abh
        )
    [9] => Array
        (   [ind] => 9
            [link] => linki/i.php
            [opis] => abi
        )
    [10] => Array
        (   [ind] => 10
            [link] => linki/j.php
            [opis] => abj
        )
    [11] => Array
        (   [ind] => 11
            [link] => linki/k.php
            [opis] => abk
        )
)


i ...
porównać wartości dostępów z ind w tablicy uprawnień.
Następnie chciałbym pozostawić/utworzyć tablicę w których wartości z pierwszej są równe ind w drugiej.
Przykład:
Po przefiltrowaniu jeśli string ma wartości 1,2,3,6 pozostało/powstało coś takiego:
Kod: Zaznacz cały
Array
(
    [1] => Array
        (   [ind] => 1
            [link] => linki/a.php
            [opis] => aba
        )
    [2] => Array
        (   [ind] => 2
            [link] => linki/b.php
            [opis] => abb
        )
    [3] => Array
        (   [ind] => 3
            [link] => linki/c.php
            [opis] => abc
        )
    [6] => Array
        (   [ind] => 6
            [link] => linki/f.php
            [opis] => abf
        )
)


Największym problemem jest to że nie wiem jak/nie umiem odnieść się do numerów tablic w tablicy uprawnień i porównać je ze stringiem (tablicą dostępów utworzoną ze stringa).
Proszę o pomoc i z góry dziękuję za jej udzielenie.
m0ty1
Posty: 6
Dołączył(a): 20.10.2016

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 20.10.2016, 08:08:12

Kod: Zaznacz cały
<?php
$przefiltrowana = array_filter($tablica_uprawnien, function ($val) use ($uprawnienia_uzytkownika) {
    return in_array($val['ind'], $uprawnienia_uzytkownika);
});
?
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19145
Dołączył(a): 14.04.2002

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 21.10.2016, 07:03:29

Dzięki wielkie za podpowiedź !

Niestety potraktowanie tablic takim kodem nie daje żadnych wyników w powstałej tablicy.
Tablica jest pusta.
Wydaje mi się ,że coś nie gra z odniesieniem do elementów tablicy uprawnień (tej z linkami i opisami).
m0ty1
Posty: 6
Dołączył(a): 20.10.2016

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 24.10.2016, 08:34:08

Nie widzę opcji edytowania posta więc wstawiam poniżej.
Taki zapis zadziałał u mnie:
Kod: Zaznacz cały
$przefiltrowana = array_filter($tablica_uprawnien, function ($val) use ($uprawnienia_uzytkownika)
         {return in_array($val['ind'], $uprawnienia_uzytkownika);});

Piękne dzięki kuku.
m0ty1
Posty: 6
Dołączył(a): 20.10.2016

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 10.01.2017, 11:00:59

Witam,
Chciałbym pociągnąć wątek dalej bo zablokowałem się na kolejnej rzeczy:
Mam tablicę z uprawnieniami do php (79 sztuk) z której rysuję checkboxy za pomocą:
Kod: Zaznacz cały
for($i=1; $i<sizeof($dostepy); $i++)
echo '<input type="checkbox" name="checkb" value="$i">'.$dostepy[$i]['opis'].'<br>';

Mam także tablicę utworzoną ze stringa w której są numery kolejnych checkboxów do których dany użytkownik ma uprawnienia:
Kod: Zaznacz cały
$uprawnienia = array_map(function($val) {return $val=1; }, $flipped);

daje wynik:
Kod: Zaznacz cały
Array
(
    [1] => 1
    [2] => 1
    [3] => 1
    [9] => 1
    [13] => 1
    [17] => 1
    [19] => 1
    [29] => 1

teraz chciałbym aby checkboxy (1,2,3,9,13,17,19,29) były checked.

Proszę o pomoc bo jak już człowiek siedzi nad tym kilka dni to nic sensownego nie wymyśli.
m0ty1
Posty: 6
Dołączył(a): 20.10.2016

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 10.01.2017, 23:13:40

Nie rozumiem, jaki masz problem techniczny/na poziomie logiki kodu związany z ustawieniem zaznaczenia?
kabexxx
Posty: 146
Dołączył(a): 27.11.2011

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 11.01.2017, 09:59:11

Dzięki za info, być może nie wyraziłem się jasno.
Nie mogę sobie poradzić z odniesieniem do kluczy tablicy ($uprawnienia), tak aby przy
Kod: Zaznacz cały
 echo '<input type="checkbox" name="checkb" value="$i">'.$dostepy[$i]['opis'].'<br>';

porównywał mi klucze z tablicy ($uprawnienia) z ($i) przy rysowaniu checkboxów i robił check przy tych które mają równe wartości (gdy i = kluczowi w $uprawnienia).
m0ty1
Posty: 6
Dołączył(a): 20.10.2016

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 11.01.2017, 19:58:42

Tablica $uprawnienia to taka, jak w pierwszym poście?
m0ty1 napisał(a):
Kod: Zaznacz cały
Array
(   [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
)


Jeśli tak, to chodzi chyba o wartości kluczy w
porównywał mi klucze z tablicy ($uprawnienia) z ($i) przy rysowaniu checkboxów i robił check przy tych które mają równe wartości (gdy i = kluczowi w $uprawnienia).

Daj znać, czy o to chodzi.
kabexxx
Posty: 146
Dołączył(a): 27.11.2011

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 12.01.2017, 07:44:18

Dokładnie.
Mam tablicę $uprawnienia (ta sama jak w Twoim poście tylko flipped):
Kod: Zaznacz cały
Array
(
    [1] => 1
    [2] => 1
    [3] => 1
    [9] => 1
    [13] => 1
    [17] => 1
    [19] => 1
    [29] => 1

która mi wskazuje który checkbox ma być checked (1,2,3,9,13,17,19,29)
I teraz chciałbym wstawić warunek do tego kodu:
Kod: Zaznacz cały
 echo '<input type="checkbox" name="checkb" value="$i">'.$dostepy[$i]['opis'].'<br>';

tak aby zaznaczył mi checkboxy gdy i = 1, i=2, i=3, i=9 i td.

Jak zapisać warunek aby porównywał $i z kluczem z tabeli $uprawnienia i zaznaczał checkboxy.

Pięknie dziękuję za pomoc w temacie.
m0ty1
Posty: 6
Dołączył(a): 20.10.2016

Re: [php] filtrowanie tablicy przez drugą tablicę

Post 13.01.2017, 01:40:21

Jeśli to odpowiada numeracją kolejnego checkboxa, to możesz zwyczajnie umieścić w pętli warunek czy $uprawnienia[$i]==1 czy tam isset($uprawnienia[$i]).
kabexxx
Posty: 146
Dołączył(a): 27.11.2011


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości

Subskrypcja

Mamy 48561 zarejestrowanych użytkowników.
Najnowszy użytkownik: PeterPaism


Nasi użytkownicy napisali:

  • 931666 wiadomości
  • w 244914 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)