Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Pętla for i łączenie tych samych wartości w 1 wiersz

Napisany przez: casperii 14.07.2019, 16:38:03

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

  1. $wielkosc = http://www.php.net/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. http://www.php.net/echo 'pobieram cos: '.$wielkosc[$i];
  4. http://www.php.net/echo '<br>';
  5. http://www.php.net/echo 'tu mam druga tablice z mailem: '.$tablicaEmail[$i];
  6. http://www.php.net/echo '<br>';
  7. http://www.php.net/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źć.

Napisany przez: Neutral 14.07.2019, 18:57:14

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. <http://december.com/html/4/element/body.html style="background: darkgoldenrod;">
  2. <http://december.com/html/4/element/pre.html>


  1. <?php
  2.  
  3. $a = http://www.php.net/array("hello","hello","not","hello","hello","mouse");
  4. $b = http://www.php.net/array("zero","one", "two", "three","hello","fish");
  5.  
  6. $arr = [];
  7.  
  8. $count_els = (http://www.php.net/count($a) == http://www.php.net/count($b)) ? http://www.php.net/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. http://www.php.net/unset($arr[$j]);
  22. $arr = http://www.php.net/array_values($arr);
  23.  
  24. $j--;
  25. }
  26. }
  27. }
  28.  
  29.  
  30.  
  31. for($i=0;$i<count($arr);$i++) {
  32. http://www.php.net/echo '<div class="even_odd">';
  33. http://www.php.net/echo '<span class="content1">'.$arr[$i][0].'</span>'.':<br />';
  34. for($j=1;$j<count($arr[$i]);$j++) {
  35. http://www.php.net/echo '<span class="content2">'.$arr[$i][$j].'</span>'. '<br />';
  36. }
  37. http://www.php.net/echo '</div>';
  38. }
  39.  
  40. ?>


  1. </http://december.com/html/4/element/body.html>


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ć.

Napisany przez: nospor 15.07.2019, 14:51:18

@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. http://www.php.net/print_r($wynik);

I juz.

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

Napisany przez: dublinka 15.07.2019, 18:04:17

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. http://www.php.net/print_r($result);

Napisany przez: trueblue 16.07.2019, 11:43:01

"50,60" to string, nie tablica.

Napisany przez: nospor 16.07.2019, 11:46:23

Wiemy smile.gif W czym problem?

Napisany przez: dublinka 16.07.2019, 12:19:20

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

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

Napisany przez: 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 ) )


Napisany przez: dublinka 16.07.2019, 13:46:29

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. http://www.php.net/print 'klucz: ' . $key . '<br>';
  12. http://www.php.net/print 'vartość: ' . http://www.php.net/join(' ', $value) . '<p>';
  13. }



Napisany przez: trueblue 16.07.2019, 13:47:10

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.

Napisany przez: nospor 16.07.2019, 13:48:09

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

Napisany przez: trueblue 16.07.2019, 13:51:06

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.

Napisany przez: nospor 16.07.2019, 13:53:14

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

Napisany przez: trueblue 16.07.2019, 13:54:48

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.

Napisany przez: dublinka 16.07.2019, 13:57:56

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

Napisany przez: nospor 16.07.2019, 13:58:15

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

Napisany przez: trueblue 16.07.2019, 13:58:29

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".

Napisany przez: dublinka 16.07.2019, 14:20:48

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

Napisany przez: trueblue 16.07.2019, 16:00:50

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.

Napisany przez: casperii 16.07.2019, 22:53:33

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. http://www.php.net/explode(',',$rozbijgo);
  2. $rozbijgo[0];

itd

Napisany przez: dublinka 17.07.2019, 13:24:44

Cytat(casperii @ 16.07.2019, 22:53:33 ) *
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. http://www.php.net/explode(',',$rozbijgo);
  2. $rozbijgo[0];

itd


Więc dostałeś to co chciałeś. smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)