Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Nieoczekiwane działanie array_unique()
Bejkrools
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

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


Hej, mam problem z działaniem array_unique, z resztą sami zobaczcie:

  1. $zapytanie = mysql_query("SELECT promocja FROM umowy_promocje");
  2. if(mysql_num_rows($zapytanie) > 0)
  3. {
  4. $x=1;
  5. while($u = mysql_fetch_assoc($zapytanie))
  6. {
  7. $cala_nazwa_promocji[$x] = explode("-",$u['promocja']);
  8. $x = $x+1;
  9. }
  10. }


Bo niektóre z promocji składają się z dwóch członów, oddzielonych "-". A ja potrzebuję tylko pierwszy człon w tej części kodu wiec w ten sposób tworzę tablice która zawiera tyko pierwszy człon promocji.

  1. $n = count($cala_nazwa_promocji);
  2. for ($i=1; $i<$n; $i++)
  3. {
  4. $nazwa_promocji_part1[$i] = $cala_nazwa_promocji[$i][0];
  5. }
  6. $unique_nazwa_promocji_part1 = array_values(array_unique($nazwa_promocji_part1));


No i tu zaczynają się klopoty, bo przykładowy wynik to:

$cala_nazwa_promocji
Array
(
[1] => Array
(
[0] => Promocja Lato
)

[2] => Array
(
[0] => Promocja Zima
)
)

$nazwa_promocji_part1
Array
(
[1] => Promocja Lato
)

$unique_nazwa_promocji_part1
Array
(
[0] => Promocja Lato
)

Działanie tej funkcji rozumiem tak, że wybiera pierwszy z elementów, które się powtarzają.

Dla tablicy składającej się z elementów: LATO, ZIMA, LATO, ZIMA, JESIEN, JESIEN, ZIMA, WIOSNA po operacji array_unique w nowej tablicy zostało: LATO, ZIMA, JESIEN. Wiosna została jakby usunięta. Co jest przyczyną? Czy robię coś źle?
Go to the top of the page
+Quote Post
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(Bejkrools @ 28.01.2014, 14:03:59 ) *
Co jest przyczyną? Czy robię coś źle?

Trudno żebyś otrzymał poprawny wynik, jak do funkcji przekazujesz złe dane (IMG:style_emoticons/default/wink.gif)

  1. $n = count($cala_nazwa_promocji); // <-- to zwraca rozmiar tablicy, czyli w Twoim przypadku "2"
  2. for ($i=1; $i < $n; $i++) // <-- ta pętla wykona tylko jedną iterację, bo zaczynasz na "1", dodajesz "1" i od razu kończysz, bo $i nie jest mniejsze niż $n (czyli 2). Powinno być w warunku "<="


Ten post edytował sowiq 28.01.2014, 14:21:11
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 13:21