Drukowana wersja tematu
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 :
$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:
for($i=0; $i < $wielkosc; $i++){
http://www.php.net/echo 'pobieram cos: '.$wielkosc[$i];
http://www.php.net/echo '<br>';
http://www.php.net/echo 'tu mam druga tablice z mailem: '.$tablicaEmail[$i];
http://www.php.net/echo '<br>';
http://www.php.net/echo 'tu mam jakies dane: '.$tablicaDane[$i];
}
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;
}
<http://december.com/html/4/element/body.html style="background: darkgoldenrod;">
<http://december.com/html/4/element/pre.html>
<?php
$a = http://www.php.net/array("hello","hello","not","hello","hello","mouse");
$b = http://www.php.net/array("zero","one", "two", "three","hello","fish");
$arr = [];
$count_els = (http://www.php.net/count($a) == http://www.php.net/count($b)) ? http://www.php.net/count($a) : 0;
for($i=0;$i<$count_els;$i++) {
$arr[] = [$a[$i], $b[$i]];
}
for($i=0;$i<count($arr);$i++) {
for($j=1;$j<count($arr);$j++) {
if($arr[$i][0] == $arr[$j][0] && $i != $j) {
$arr[$i][] = $arr[$j][1];
http://www.php.net/unset($arr[$j]);
$arr = http://www.php.net/array_values($arr);
$j--;
}
}
}
for($i=0;$i<count($arr);$i++) {
http://www.php.net/echo '<div class="even_odd">';
http://www.php.net/echo '<span class="content1">'.$arr[$i][0].'</span>'.':<br />';
for($j=1;$j<count($arr[$i]);$j++) {
http://www.php.net/echo '<span class="content2">'.$arr[$i][$j].'</span>'. '<br />';
}
http://www.php.net/echo '</div>';
}
?>
</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
$wynik = [];
foreach ($tablicaDane as $k => $value) {
$email = $tablicaEmail[$k];
$wynik[$email][] = $value;
}
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
$a = [keys....];
$b = [values....];
$result = [];
foreach ($a as $i => $k) {
$result[$k][] = $b[$i];
}
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 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
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 ?
Nie cytujesz wiec nie wiem do kogo piszesz.
Do kazdej moze byc "przypisane" cokolwiek
function one_to_one($arr1,$arr2) {
$out = [];
foreach($arr1 as $key1 => $value1) {
$out[$value1][] = $arr2[$key1];
}
return $out;
}
$result = (one_to_one($a,$b));
foreach ($result as $key => $value) {
http://www.php.net/print 'klucz: ' . $key . '<br>';
http://www.php.net/print 'vartość: ' . http://www.php.net/join(' ', $value) . '<p>';
}
Napisany przez: trueblue 16.07.2019, 13:47:10
Cytat(dublinka @ 16.07.2019, 14:29:16 )
Nie potrafisz tego odczytac czy jak ?
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
Dziękuje za podrzucenie rozwiązania, tak chciałem tylko stringa , nawet gdyby to trzeba było rozbić to:
http://www.php.net/explode(',',$rozbijgo);
$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
Dziękuje za podrzucenie rozwiązania, tak chciałem tylko stringa , nawet gdyby to trzeba było rozbić to:
http://www.php.net/explode(',',$rozbijgo);
$rozbijgo[0];
itd
Więc dostałeś to co chciałeś.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)