Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zabłądziłem - array_filter
shpaque
post 1.08.2018, 10:44:23
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witam szybki temacik bo zabłądziłem. Chcę aby wyswietlił mi tylko miesiące, które znajdzie w bazie. W pliku xml mam 3x 07(lipiec) + 1x 08(sierpien) przy array_fplip zamieniam zdublowane siodemki na jedna i zostaje mi tablica 07, 08 - jak teraz zrobicfiltr tablicy $months zeby mi wyswietlil tylko odpowiendiki?

  1. $blogDB = simplexml_load_file('./db/blog.xml');
  2. $months = ['01' => 'styczeń', '02' => 'luty', '03' => 'marzec', '04' => 'kwiecień', '05' => 'maj', '06' => 'czerwiec', '07' => 'lipiec', '08' => 'sierpień', '09' => 'wrzesień', '10' => 'październik', '11' => 'listopad', '12' => 'grudzień'];
  3. $articles = array();
  4. $articleDates = array();
  5.  
  6. foreach ($blogDB -> article as $a)
  7. {
  8. $articles[] = ['id' => (string)$a['id'], 'date' => (string)$a['date'], 'title' => (string)$a['title'], 'description' => (string)$a['description']];
  9. }
  10. $countArticles = count($articles);
  11.  
  12. if ($countArticles > 0)
  13. {
  14. foreach ($articles as $article)
  15. {
  16. $articleDates[] = date('m', strtotime($article['date']));
  17. }
  18. }
  19. // Zamieniamy wartość na klucz
  20. $articleDates = array_flip($articleDates);
  21. // sortujemy po kluczu
  22. $articleDates = arsort($articleDates);
  23. $monthsToView = array_filter($months function($articleDates) use($months) {return in_array($articleDates, $months);});
  24.  
  25. print_r($monthsToView);


@EDIT

dobra z tym sobie jakos poradzilem, a teraz jak zrobic, zeby jeszcze dzielil to na lata. W tym momencie mam w tablicy 1x lipiec 17, 2x lipiec 18 i 1 x sierpien 18, chcialbym zeby mi wyswietlil:

sierpien 18
lipiec 18
lipiec 17

  1. if ($countArticles > 0)
  2. {
  3. foreach ($articles as $article)
  4. {
  5. $articleMonth = date('m', $article['date']);
  6. $articleYear = date('y', $article['date']);
  7. if (in_array($articleMonth, array_flip($months)))
  8. {
  9. $datesToView[$months[$articleMonth]] = $articleYear;
  10. }
  11. }
  12. }
  13. print_r($datesToView);
Go to the top of the page
+Quote Post
kallosz
post 1.08.2018, 11:56:04
Post #2





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


próbowałeś array_unique?


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
shpaque
post 1.08.2018, 15:31:01
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


patrzylem ale nei wiem jak to zrobic, moze inaczej - prosciej?

jak zrobic tablice:

Array("17" => "lipiec", "18" => Array(0 => lipiec, 1=> sierpien))?

array_unique w tym przypadku to zly pomysl, ja musze wywalic jesli znajdzie zestaw "key => value" taki sam...

  1. if ($countArticles > 0)
  2. {
  3. foreach ($articles as $article)
  4. {
  5. $articleMonth = date('m', $article['date']);
  6. $articleYear = date('y', $article['date']);
  7.  
  8. $datesToView[] = [$months[$articleMonth] => $articleYear];
  9. }
  10. }


daje mi tablice

  1. Array ( [0] => Array ( [sierpień] => 18 ) [1] => Array ( [lipiec] => 18 ) [2] => Array ( [lipiec] => 18 ) [3] => Array ( [lipiec] => 17 ) )


jest tu wiec 2 razy lipiec 18 - jak to wywalic?

przelecielame 10 razy array_unique i oczywiscie znalazlem zupelnie gdzie indziej, fajnie ze mi ktos powiedzial, ze do array_unique trzebva dodac SORT...

  1. if ($countArticles > 0)
  2. {
  3. foreach ($articles as $article)
  4. {
  5. $articleMonth = date('m', $article['date']);
  6. $articleYear = date('y', $article['date']);
  7.  
  8. $datesToView[] = ['month' => $months[$articleMonth], 'year' => $articleYear];
  9. }
  10. }
  11. $datesToView = array_unique($datesToView, SORT_REGULAR);


do zamkniecia
Go to the top of the page
+Quote Post
Pyton_000
post 1.08.2018, 16:17:26
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Kod
$datesToView[$articleYear][$articleMonth] = true;
var_dump($datesToView);
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 07:44