Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Odwołanie do tablicy array, poproszę o rady i poprawki kodu.
casperii
post
Post #1





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


Poniżej kod, wszystko niby ok działa, ale pojawia się problem z 2 "rzeczami"
1 - nie ma sortowania (najmniejszy / największy element) ,próbowałem z ksort / asort , ale to nie problem mogę sortować liczby przy zapisie do bazy.
2 - jeżeli identyfikator jest większy niż 9 pojawia się problem, 10 - traktuje jak 1

poniżej kod:

  1. foreach($sql->fetchAll() as $arr){
  2. $myArr[] = array(
  3. $arr['id'] => $arr['name']
  4. );
  5. }
  6.  
  7. try {
  8. while($row = $sql->fetch(PDO::FETCH_ASSOC)){
  9.  
  10. $translate = '';
  11. $explodeNr = explode(',', $row['idc']);
  12.  
  13. foreach($explodeNr as $ex){
  14. $translate .= $myArrL[$ex[0]-1][$ex[0]] . ', ';
  15. }
  16. echo $translate;
  17. }


Ten post edytował casperii 6.06.2022, 19:32:26
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jeden z bardziej chaotycznie (nie)opisanych problemow.

Co ci traktuje 10 jak 1? Zrozum, my nie wiemy co to za dane, w jakim formacie i co ci co traktuje. W myslach nie czytamy tongue.gif
Jesli zas miales na mysli, ze baza podczas sortowania traktuje ci 10 jak 1 to pole w bazie ma byc typy LICZBOWEGO a nie TEKSTOWEGO


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


A dlaczego nie posortujesz tego na poziomie zapytania?
Go to the top of the page
+Quote Post
casperii
post
Post #4





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


@nospor , przecież powyżej masz kod pokazany, taki mądry człowiek jak Ty i sobie nie poradził , ok wyjawię sekret w sposób bardziej logiczny / łopatologiczny.

w tablicy $myArr[] przechowuje identyfikator i nazwę z tabeli "X"
1 - na lato
2 - na jesień
3 - na zime
4 - na wiosnę

następnie odpytuje tabele "Y" i wyświetlam wyniki pętlą while
nazwa | kat
1. seksowna kiecka , 1,2,3,4 (czyli ta zwiewna kiecka może być na lato , na jesień, na zimę , na wiosnę smile.gif

jak widać w bazie przechowuje kolumnę kat jako varchar o wartości 1,2,3,4 więc zastosowałem rozbicie za pomocą explode i "przetłumaczenie rozbitego członu na język bardziej zrozumiały dla użytkownika.

  1. foreach($explodeNr as $ex){
  2. $translate .= $myArrL[$ex[0]-1][$ex[0]] . ', ';
  3. }



print_r($myArr);

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [1] => na lato
  6. )
  7.  
  8. [1] => Array
  9. (
  10. [2] => na jesień
  11. )
  12.  
  13. [2] => Array
  14. (
  15. [3] => na zime
  16. )
  17.  
  18. [3] => Array
  19. (
  20. [4] => na wiosne
  21. )
  22.  
  23. )
Go to the top of the page
+Quote Post
viking
post
Post #5





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Po kiego tworzysz podtablicę dla tych wartości? Wypchnij to poziom wyżej a wtedy masz prosta sprawę z wyszukiwaniem.


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #6





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


Cytat(viking @ 7.06.2022, 20:33:45 ) *
Po kiego tworzysz podtablicę dla tych wartości? Wypchnij to poziom wyżej a wtedy masz prosta sprawę z wyszukiwaniem.


co znaczy "wypchnij" to wyżej?
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Powinieneś się domyślić wink.gif
  1. $myArr = [];
  2. foreach($sql->fetchAll() as $arr){
  3. $myArr[(int) $arr['id']] = $arr['name'];
  4. }


--------------------
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(viking @ 8.06.2022, 06:47:45 ) *
  1. $myArr = [];
  2. foreach($sql->fetchAll() as $arr){
  3. $myArr[(int) $arr['id']] = $arr['name'];
  4. }

Jeśli to PDO, to można tak:
  1. $myArr = $sql->fetchAll(PDO::FETCH_KEY_PAIR);

P.S. Zapytanie ma wybierać tylko kolumny id oraz name.


--------------------
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 Aktualny czas: 20.08.2025 - 09:36