• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie Par z tablicy

Object Storage Arubacloud
0 głosów
847 wizyt
pytanie zadane 17 maja 2015 w PHP przez SebastianGomularz Dyskutant (9,370 p.)
Mam problem chciał by napisac skrypt tworzący pary z elementów tablic.Miał bym np 10 drużyn i losował by on automatycznie dla  pare z tych 10 np.

Gospodarz      Gość

druzyna nr 1 - drużyna nr 6

druzyna nr 9 - drużyna nr 4

druzyna nr 3 - drużyna nr 7

druzyna nr 2 - drużyna nr 10

druzyna nr 8 - drużyna nr 5

 

i chcem by druznyny nie powtarzały sie w wylosowaniu. i niewiem jak to napisac dokładnie.

3 odpowiedzi

0 głosów
odpowiedź 17 maja 2015 przez Comandeer Guru (601,110 p.)

Przydadzą Ci się dwie funkcje - array_rand array_splice. W pętelce pierwszą pobierasz sobie dwie losowe drużyny z tablicy i przerzucasz je do tablicy par przy wykorzystaniu funkcji array_splice (czyli usuwasz już wykorzystane drużyny z głównej tablicy). Tym samym zapewnisz sobie pełną losowość i unikalność.

komentarz 17 maja 2015 przez SebastianGomularz Dyskutant (9,370 p.)
niezabardzo rozumniem czyli robie 2 tablice jedną z druzynami do losowania a druga z wylosowanymi parami której elementy bedą usuwane z tablicy pierwszej?
komentarz 17 maja 2015 przez Comandeer Guru (601,110 p.)

Łap przykładową implementację z komentarzami ;)

<?php
$teams = [
	1
	,2
	,3
	,4
	,5
	,6
	,7
	,8
];

$c = count($teams) / 2; //pętla musi się wykonać dla każdej pary, więc liczba drużyn / 2

$pairs = []; //tu będziemy trzymać pary; para to tablica (dostaniemy tablicę tablic)

for($i = 0; $i < $c; ++$i)
{
	$pair = [];

	$key = array_rand($teams); //losujemy losowy indeks z tablicy $teams

	$pair[] = array_splice($teams, $key, 1)[0]; //na czym polega ta funkcja? Każemy jej wyciąć z $teams 1 element licząc od pozycji wcześniej wylosowanego indeksu
	//array_splice()[0]. bo niestety zwraca to tablicę

	//powtarzamy operację
	$key = array_rand($teams);

	$pair[] = array_splice($teams, $key, 1)[0];

	//można też inaczej, np.
	//shuffle($teams); //"mieszamy" tablicę
	//$pair = [array_shift($teams), array_shift($teams)]; //wsadzamy 2 pierwsze elementy wymieszanej tablicy do $pair
	//chyba nawet ładniej

	$pairs[] = $pair; //dodajemy nową parę do reszty par
}

var_dump($pairs, $teams); //sprawdzamy czy nasze założenia są słuszne ;)

 

komentarz 17 maja 2015 przez SebastianGomularz Dyskutant (9,370 p.)
co zrobic by nie wyswietlało sie tak

array(4) { [0]=> array(2) { [0]=> string(8) "Paradisa" [1]=> string(7) "Cyclops" } [1]=> array(2) { [0]=> string(5) "Jiras" [1]=> string(10) "Red Tigers" } [2]=> array(2) { [0]=> string(6) "Xenons" [1]=> string(7) "Pirates" } [3]=> array(2) { [0]=> string(9) "Snow Kids" [1]=> string(6) "Rykers" } } array(0) { }

 

tylko tak np Paradisa-Cyclops,Jiras-Red Tigers itd
komentarz 17 maja 2015 przez Comandeer Guru (601,110 p.)

Zamiast var_dump zastosuj pętlę na $pairs echo

foreach($pairs as $pair)
	echo '<p><b>' . $pair[0] . '</b> zagra przeciwko <b>' . $pair[1] .'</b></p>';

 

0 głosów
odpowiedź 17 maja 2015 przez CzlowiekSkrypt Nałogowiec (26,340 p.)
edycja 17 maja 2015 przez CzlowiekSkrypt
Łap łopatologiczny skrypt ale działa :)
 

<?php
$teams = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H');

shuffle($teams);

for($i = 0; $i <= count($teams)-1; ++$i){

    echo "Druzyna ".$teams[$i]."Zagra przeciwko druzynie ".$teams[$i+1]."<br />";
    $i++;
}
komentarz 17 maja 2015 przez Comandeer Guru (601,110 p.)
Taka mała szpileczka: 8 par z 8 drużyn? ;)

Edit: a nie, bo wewnątrz jest jeszcze jedna inkrementacja - fakt, nie dopatrzyłem.
komentarz 17 maja 2015 przez CzlowiekSkrypt Nałogowiec (26,340 p.)
Tak jak napisałem - łopatologia poziom zaawansowany :P
0 głosów
odpowiedź 17 maja 2015 przez SebastianGomularz Dyskutant (9,370 p.)

dzięki za chceci comandeer

człowiek skrypt to twój skrypt użyłem dzieki wielkie

 

 

Podobne pytania

0 głosów
6 odpowiedzi 1,239 wizyt
pytanie zadane 19 maja 2015 w C i C++ przez serabio Nowicjusz (180 p.)
0 głosów
1 odpowiedź 682 wizyt
pytanie zadane 11 marca 2018 w Matematyka, fizyka, logika przez LFC Nowicjusz (120 p.)
0 głosów
1 odpowiedź 317 wizyt
pytanie zadane 25 kwietnia 2016 w Algorytmy przez Surykat Stary wyjadacz (14,780 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...