Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Pętla for i łączenie tych samych wartości w 1 wiersz, jak wykonać?
casperii
post 14.07.2019, 16:38:03
Post #1





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

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


Panowie mam pytanie odnośnie pętli for.
Otóż mam kod , sprawdzam wielkość elementów w tablicy :

  1. $wielkosc = count($tablica);


następnie po określeniu wielkości tablicy tworzę pętle w której odwołuje się do danego elementu:

  1. for($i=0; $i < $wielkosc; $i++){
  2.  
  3. echo 'pobieram cos: '.$wielkosc[$i];
  4. echo '<br>';
  5. echo 'tu mam druga tablice z mailem: '.$tablicaEmail[$i];
  6. echo '<br>';
  7. echo 'tu mam jakies dane: '.$tablicaDane[$i];
  8. }


Tablice są i będą zawsze tej samej długości , problem w tym , że tablica tablicaEmail może mieć ten sam adres email ale w tablicy tablicaDane inne wartości.
Chcę wykonać żeby adresy email te same przypisywały do siebie dane z tablicy dane. Nie wiem czy ktoś kuma o co chodzi , więc może rozrysuje:


array(5) { [0]=> string(2) "10" [1]=> string(2) "20" [2]=> string(2) "30" [3]=> string(2) "40" [4]=> string(5) "50,60" }

array(5) { [0]=> string(14) "fajny@adres.pl" [1]=> string(18) "niefajny@adres.com" [2]=> string(14) "brak@adresu.pl" [3]=> string(16) "niemam@adresu.pl" [4]=> string(14) "fajny@adres.pl" }


Jak zauważysz pierwszy i ostatni element w tablicy ma ten sam adres "fajny@adres.pl" zatem powinno wyświetlić:

fajny@adres.pl :
ma wartość : 10, 50, 60

Chyba musiałbym każdy element N z tablicy przeszukiwać po tablicy i porównywać go z no własnie jak to ugryźć.

Ten post edytował casperii 14.07.2019, 16:42:01
Go to the top of the page
+Quote Post
Neutral
post 14.07.2019, 18:57:14
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


Kod
.content1::before, .content2::before {
  display: inline;
  padding-right: 5%;
}
.content1::before {
  content: 'key:';
}
.content2::before {
  content: 'value:';
}
.even_odd:nth-child(even) {
  background: lightgreen;
}
.even_odd:nth-child(odd) {
  background: green;
}


  1. <body style="background: darkgoldenrod;">
  2. <pre>


  1. <?php
  2.  
  3. $a = array("hello","hello","not","hello","hello","mouse");
  4. $b = array("zero","one", "two", "three","hello","fish");
  5.  
  6. $arr = [];
  7.  
  8. $count_els = (count($a) == count($b)) ? count($a) : 0;
  9.  
  10. for($i=0;$i<$count_els;$i++) {
  11. $arr[] = [$a[$i], $b[$i]];
  12. }
  13.  
  14.  
  15.  
  16. for($i=0;$i<count($arr);$i++) {
  17. for($j=1;$j<count($arr);$j++) {
  18.  
  19. if($arr[$i][0] == $arr[$j][0] && $i != $j) {
  20. $arr[$i][] = $arr[$j][1];
  21. unset($arr[$j]);
  22. $arr = array_values($arr);
  23.  
  24. $j--;
  25. }
  26. }
  27. }
  28.  
  29.  
  30.  
  31. for($i=0;$i<count($arr);$i++) {
  32. echo '<div class="even_odd">';
  33. echo '<span class="content1">'.$arr[$i][0].'</span>'.':<br />';
  34. for($j=1;$j<count($arr[$i]);$j++) {
  35. echo '<span class="content2">'.$arr[$i][$j].'</span>'. '<br />';
  36. }
  37. echo '</div>';
  38. }
  39.  
  40. ?>


  1. </body>


Pierwszy indeks jest "kluczem" ($arr[$i][0]).

Zamiast array_values() można chyba zastosować continue wraz ze zmienną zapamiętującą ostatni wyrzucony indeks, ale nie jestem pewien, co do tego rozwiązania; trzeba byłoby sprawdzić.

Ten post edytował Neutral 14.07.2019, 19:10:00
Go to the top of the page
+Quote Post
nospor
post 15.07.2019, 14:51:18
Post #3





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




@Neutral, wydaje mi sie ze pomysl z ta macierza jest z lekka przekombinowany.

Powinna byc zwykla jedna petla

  1. $wynik = [];
  2. foreach ($tablicaDane as $k => $value) {
  3. $email = $tablicaEmail[$k];
  4. $wynik[$email][] = $value;
  5. }
  6.  
  7. print_r($wynik);

I juz.

Dla powiedzmy 10 elementow u mnie masz 10 iteracji, u ciebie az 100.


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

"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
dublinka
post 15.07.2019, 18:04:17
Post #4





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


lub tak
  1. $a = [keys....];
  2. $b = [values....];
  3.  
  4. $result = [];
  5. foreach ($a as $i => $k) {
  6. $result[$k][] = $b[$i];
  7. }
  8.  
  9. print_r($result);


Ten post edytował dublinka 15.07.2019, 18:04:44


--------------------
Go to the top of the page
+Quote Post
trueblue
post 16.07.2019, 11:43:01
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


"50,60" to string, nie tablica.


--------------------
Go to the top of the page
+Quote Post
nospor
post 16.07.2019, 11:46:23
Post #6





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Wiemy smile.gif W czym problem?


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

"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
dublinka
post 16.07.2019, 12:19:20
Post #7





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(trueblue @ 16.07.2019, 11:43:01 ) *
"50,60" to string, nie tablica.

Zgadza się. Jest to string w tablicy smile.gif


--------------------
Go to the top of the page
+Quote Post
trueblue
post 16.07.2019, 13:25:25
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


W tym, że "50,60" będzie przypisane do email jako jeden element tablicy. Ja rozumiem to tak, że powinno być tak:

Kod
Array ( [fajny@adres.pl] => Array ( [0] => 10 [1] => 50 [2] => 60 ) )



--------------------
Go to the top of the page
+Quote Post
dublinka
post 16.07.2019, 13:46:29
Post #9





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(trueblue @ 16.07.2019, 13:25:25 ) *
W tym, że "50,60" będzie przypisane do email jako jeden element tablicy. Ja rozumiem to tak, że powinno być tak:

Kod
Array ( [fajny@adres.pl] => Array ( [0] => 10 [1] => 50 [2] => 60 ) )


Nie potrafisz tego odczytac czy jak ? smile.gif
Nie cytujesz wiec nie wiem do kogo piszesz.


Do kazdej moze byc "przypisane" cokolwiek

  1. function one_to_one($arr1,$arr2) {
  2. $out = [];
  3. foreach($arr1 as $key1 => $value1) {
  4. $out[$value1][] = $arr2[$key1];
  5. }
  6. return $out;
  7. }
  8. $result = (one_to_one($a,$b));
  9.  
  10. foreach ($result as $key => $value) {
  11. print 'klucz: ' . $key . '<br>';
  12. print 'vartość: ' . join(' ', $value) . '<p>';
  13. }




Ten post edytował dublinka 16.07.2019, 13:42:16


--------------------
Go to the top of the page
+Quote Post
trueblue
post 16.07.2019, 13:47:10
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(dublinka @ 16.07.2019, 14:29:16 ) *
Nie potrafisz tego odczytac czy jak ? smile.gif
Nie cytujesz wiec nie wiem do kogo piszesz.


Do kazdej moze byc "przypisane" cokolwiek

Niestety Ciebie kompletnie nie rozumiem.

Autor pokazał przykład:
fajny@adres.pl :
ma wartość : 10, 50, 60

czyli według mnie to tego adresu e-mail ma być przypisana tablica z 3-ma elementami, a nie dwoma.
Czy tak jest, tego nie wiem. Jest 50% szans. Jednakże widząc posta autora ja bym oczekiwał takiego rozwiązania.


--------------------
Go to the top of the page
+Quote Post
nospor
post 16.07.2019, 13:48:09
Post #11





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




casperi na koniec chcial poprostu miec wynik
10, 50, 60
wiec wystarczy zwykly implode i bedzie mial co chcial. Nie widze problemu


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

"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
trueblue
post 16.07.2019, 13:51:06
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(nospor @ 16.07.2019, 14:48:09 ) *
casperi na koniec chcial poprostu miec wynik
10, 50, 60
wiec wystarczy zwykly implode i bedzie mial co chcial. Nie widze problemu


Albo nawet explode. Którego brak w rozwiązaniach.


--------------------
Go to the top of the page
+Quote Post
nospor
post 16.07.2019, 13:53:14
Post #13





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




skoro wynikiem ma byc string 10,50, 60 to explode jest zbedne. Wystarczy jak pisalem implode


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

"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
trueblue
post 16.07.2019, 13:54:48
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Według mnie ma być to tablica z 3-ech elementów.
Uprzedzając Ciebie - tego nie wiemy, można domniemywać czego konkretnie oczekuje autor.


--------------------
Go to the top of the page
+Quote Post
dublinka
post 16.07.2019, 13:57:56
Post #15





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(trueblue @ 16.07.2019, 13:51:06 ) *
Albo nawet explode. Którego brak w rozwiązaniach.

Kolego.
Z czym masz problem dalej.

Cytat(trueblue @ 16.07.2019, 13:47:10 ) *
Niestety Ciebie kompletnie nie rozumiem.

Autor pokazał przykład:
fajny@adres.pl :
ma wartość : 10, 50, 60

czyli według mnie to tego adresu e-mail ma być przypisana tablica z 3-ma elementami, a nie dwoma.
Czy tak jest, tego nie wiem. Jest 50% szans. Jednakże widząc posta autora ja bym oczekiwał takiego rozwiązania.


Przeczytaj jeszcze raz to zrozumiesz


--------------------
Go to the top of the page
+Quote Post
nospor
post 16.07.2019, 13:58:15
Post #16





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
ma wartość : 10, 50, 60
Dla mnie to jest text, ktory casperi oczekuje wyswietlic na ekran. Temu nie bawilem sie w zadne explode bo bylo bez sensu w tym wypadku.
No ale jak w koncu laskawie casperi raczy odpisac i potwierdzic twoja teorie o tablicy, to nie widze naprawde zadnego problemu dodac expllode. 10 sekund roboty


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

"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
trueblue
post 16.07.2019, 13:58:29
Post #17





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(dublinka @ 16.07.2019, 14:56:32 ) *
Kolego.
Z czym masz problem dalej.

Kolego,
z niczym nie mam problemów. Mam natomiast wrażenie, że nie potrafisz czytać ze zrozumieniem.
Jeszcze raz napiszę. Według mnie, i nie jest to na 100% pewne i podkreślam to ponownie, autor oczekuje przypisania do email wartości: "10", "50", "60", a nie "10", "50, 60" czy też "10, 50, 60".


--------------------
Go to the top of the page
+Quote Post
dublinka
post 16.07.2019, 14:20:48
Post #18





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(trueblue @ 16.07.2019, 13:58:29 ) *
Kolego,
z niczym nie mam problemów. Mam natomiast wrażenie, że nie potrafisz czytać ze zrozumieniem.
Jeszcze raz napiszę. Według mnie, i nie jest to na 100% pewne i podkreślam to ponownie, autor oczekuje przypisania do email wartości: "10", "50", "60", a nie "10", "50, 60" czy też "10, 50, 60".


Proszę sobie przeczytać wyzej odpowiedzi. Nospor Ci dał juz tez. O co Ci chodzi.
Jestes tak zaangazowany jakbys to byl pytajacym tym z tego tematu.

Nie potrafisz czegos zrobic - nie nasz sprawa.

Tym samym koncze bo widze ze zaczyna sie na gównoburze

Ten post edytował dublinka 16.07.2019, 14:23:03


--------------------
Go to the top of the page
+Quote Post
trueblue
post 16.07.2019, 16:00:50
Post #19





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(dublinka @ 16.07.2019, 15:20:48 ) *
Proszę sobie przeczytać wyzej odpowiedzi. Nospor Ci dał juz tez. O co Ci chodzi.
Jestes tak zaangazowany jakbys to byl pytajacym tym z tego tematu.

Nie potrafisz czegos zrobic - nie nasz sprawa.

Tym samym koncze bo widze ze zaczyna sie na gównoburze

Dziękuję Ci za wskazówki. Tak się składa, że dokładniej czytałem posty i kilka razy musiałem wyjaśniać jaki ja sugeruje wynik, choć opisałem to w drugim moim poście w tym temacie. I to tylko sugestia, bo ja nie oczekuję rozwiązania i zdaję sobie sprawę jak osiągnąć oczekiwany cel, więc nie wiem skąd Twoje przypuszczenie o mojej niewiedzy.
Kolejne posty, to powtórki tego samego, co nie dla wszystkich było jasne.

A propos zaaganżowania - to chyba nic złego, nie trzeba być pytającym/autorem aby się często udzielać. Zresztą i tak bym na tym forum rzadziej niż Ty.

Może tym razem zrozumiesz o co mi chodzi i przestaniesz zachowywać się jak ignorant.


--------------------
Go to the top of the page
+Quote Post
casperii
post 16.07.2019, 22:53:33
Post #20





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

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


chwila mnie nie było i rozpętało się piekło na forum smile.gif
Dziękuje za podrzucenie rozwiązania, tak chciałem tylko stringa , nawet gdyby to trzeba było rozbić to:

  1. explode(',',$rozbijgo);
  2. $rozbijgo[0];

itd
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 18.04.2024 - 13:38