Comparatie numere din 2 array

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
mybab
Mesaje: 26

Comparatie numere din 2 array

Buna, MarPlo
Incerc sa imi fac un script care sa verifice numerele mele cu cele extrase la loto.
Nu stiu cum sa fac comparatia
Avem urmatoarele:

Cod: Selectaţi tot

$nr_winer = "23,34,11,44,42 - 2,9";  //numerele extrase la loto, primele 5 sunt numerele principale urmatoarele 2 nr. norocoase.
$numerele_mele = $arr[0] . $arr[1] . $arr[2] . $arr[3] . $arr[4] . "-" . $arr[5] . $arr[6] . "<br>"; //numerele mele
//variabila $numerele_mele Ex. contine 33,44,23,45,37 - 2,11
Vreau sa imi verifice cate numere din primele 5 am si cate din cele 2 am fata de $nr_winer.
Ca de exemplu sa afiseze asa 44,23 - 2 coparativ cu numerele date mai sus.

MarPlo
Salut
Poti adauga ambele grupuri de numere in cate un array, fiecare cu doua sub-array (unul pt. numerele principale, al doilea pt. cele norocoase).
Iar cu functia array_intersect() se obtin valorile comune din mai multe array.
Uite exemplu:

Cod: Selectaţi tot

// numere extrase
$nr_winer = [
  'p'=> [23, 34, 11, 44, 42],  // principale
  'n'=> [2, 9]  // norocoase
];

// numere adaugate
$nr_add = [
  'p'=> [33, 44, 23, 45, 37],  // principale
  'n'=> [2, 1]  // norocoase
];

// numere comune
$nr_com = [
  'p'=> array_intersect($nr_winer['p'], $nr_add['p']),
  'n'=> array_intersect($nr_winer['n'], $nr_add['n'])
];

// Test
var_export($nr_com);  // arata ce contine $nr_com
// array ('p'=> array(0=> 23, 3=> 44), 'n'=> array(0=> 2)) 
- Ca sa afisezi numerele din $nr_com, aplici foreach() la $nr_com['p'] si $nr_com['n'].

mybab
Da ii foarte ok Mersi dar nu pot sa il leg mai departe, am modificat numele variabilelor putin cele facute de tine,
Uitate putin te rog pe acest cod. Nu stiu ce ii gresit.

Cod: Selectaţi tot

$mynumber = $arr[0] . $arr[1] . $arr[2] . $arr[3] . $arr[4] . "-" . $arr[5] . $arr[6] . "<br>";
//aici is numerele mele care de exemplu sunt  mai multe variante de numere
// 11,23,15,26,7 - 3,8 ii prima varianta
// 66,44,78,33,1 - 4,9 ii a doua varianta
// 47,31,98,24,6 - 6,10 ii a treia varianta  
La mine $arr[0] are primele numere, ca de exemplu 11, 66, 47 (prima coloana) iar $arr[2] are 23,44,31 (a doua coloana) si asa mai departe
Daca pun echo $mynumber; imi arata asa:

Cod: Selectaţi tot

11,23,15,26,7 - 3,8
66,44,78,33,1 - 4,9
47,31,98,24,6 - 6,10

Cod: Selectaţi tot

// numere extrase
$nr_extrase = [
  'bile'=> [23, 34, 11, 44, 42],  // principale
  'star'=> [2, 9]  // norocoase
];

// numere adaugate/// AICI AM PUS ARR
$nr_user = [
  'bile'=> $arr[0], $arr[1], $arr[2], $arr[3], $arr[4],  // principale
  'star'=> $arr[5], $arr[6]  // norocoase
];

// numere comune
$nr_comune = [
  'bile'=> array_intersect($nr_extrase['bile'], $nr_user['bile']),
  'star'=> array_intersect($nr_extrase['star'], $nr_user['star'])
];
//var_export($nr_comune)

 $numere_bile =$nr_comune['bile'];
 $numere_star =$nr_comune['star'];

foreach(array_merge($numere_bile, $numere_star) as $result) {
  echo $result."\n"."<br>";
}
La echo nu imi arata nimic si nici nu imi da eroare.
Practic ar trebuie sa imi arate
23,11 -
44 - 9

Mersi mult.

MarPlo
In $ar_user, valorile din $arr trebuie adaugate intr-un sub-array.

Cod: Selectaţi tot

$nr_user = [
  'bile'=> [$arr[0], $arr[1], $arr[2], $arr[3], $arr[4]],  // principale
  'star'=> [$arr[5], $arr[6]]  // norocoase
]; 
- Serverul trebuie sa aibe PHP 5.4+, daca e versiune mai vech trebuie facuta modificare la sintaxa pt. array ca in acest exemplu:

Cod: Selectaţi tot

$arr = [1, 2, 3];
$arr = array(1, 2, 3);  // pt PHP mai vechi de versiunea 5.4 

mybab
M-ai pus in ceata,
Am wampserver cu PHP Version 5.5.12
nu stiu cum sa le bag in sub array, Daca am mai multe variante si in subarray vede doar 3 variante,
//De aici ii traseul numerelor din baza de date $rand['varianta'] si le scoate asa :
8 , 10 , 18 , 23 , 33 + 8 , 11
24 , 27 , 30 , 36 , 39 + 2 , 11
6 , 14 , 21 , 39 , 49 + 3 , 7
11 , 20 , 23 , 33 , 45 + 3 , 5 // sunt 4 variante

Cod: Selectaţi tot

//formatare numere afisate in tabel
$oldNumberDesignx = $rand['varianta']; //Sunt din baza de date
$oldNumberDesignxx = str_replace('+ ', ',', $oldNumberDesignx);
$oldNumberDesign = $oldNumberDesignxx;
$arr = explode(',', $oldNumberDesign);
$newDesignNumber = "<div class='lottery_ball_1'>$arr[0]</div><div class='lottery_ball_1'>$arr[1]</div><div class='lottery_ball_1'>$arr[2]</div><div class='lottery_ball_1'>$arr[3]</div><div class='lottery_ball_1'>$arr[4]</div><div class='lottery_stars_1'>$arr[5]</div><div class='lottery_stars_1'>$arr[6]</div>";
//////////////
//$mynumers = $arr[0] . $arr[1] . $arr[2] . $arr[3] . $arr[4] . "-" . $arr[5] . $arr[6] . "<br>";
//echo $mynumers;

// numere extrase
$nr_extrase = [
  'bile'=> [23, 34, 11, 44, 42],  // principale
  'star'=> [2, 9]  // norocoase
];

// numere adaugate
$nr_user = [
  'bile'=> $arr[0], $arr[1], $arr[2], $arr[3], $arr[4],  // principale
  'star'=> $arr[5], $arr[6]  // norocoase
  
];

// numere comune
$nr_comune = [
  'bile'=> array_intersect($nr_extrase['bile'], $nr_user['bile']),
  'star'=> array_intersect($nr_extrase['star'], $nr_user['star'])
];
//var_export($nr_comune)

 $numere_bile =$nr_comune['bile'];
 $numere_star =$nr_comune['star'];

foreach(array_merge($numere_bile, $numere_star) as $biles) { 
echo $biles."\n";
}
Daca pun echo afara din []

Cod: Selectaţi tot

$nr_user = [
'bile'=> array($arr[0], $arr[1], $arr[2], $arr[3], $arr[4]), // principale
'star'=> array($arr[5], $arr[6]) // norocoase
];
echo $arr[0];// imi arata prima coloana 8, 24,6,11 
si in interior nu mi le pune
Mersi

MarPlo
Am crezut ca $arr[0] contine primul numar, nu ma multe. In cazul asta trebuie facut explode la $arr[0], $arr[1] , ... si repuse numerele in alt array, de exemplu $ar2, in care $ar2[0] sa contina "principale" si "norocoase" cu numerele din primul rand, $ar2[1] cu cele din randul 2, etc.
Vezi cum te descurci cu acest exemplu:

Cod: Selectaţi tot

$arr = [
  '8, 24, 6, 11',  // E $arr[0]
  '10, 27, 14, 20', // e $arr[1]
  '18, 30, 31, 23',
  '23, 36, 39, 33',
  '33, 39, 49, 45',
  '11, 11, 7, 5'
];
$nr_arr = count($arr);

$arr_2 = [];
for($i=0; $i<$nr_arr; $i++) {
  $arr_2[$i] = explode(',', $arr[$i]);
}

$ar2 = [];
$nr_arr = count($arr_2[0]);
for($i=0; $i<$nr_arr; $i++) {
  for($i2=0; $i2<4; $i2++) $ar2[$i]['p'][] = $arr_2[$i2][$i];
  for($i2=4; $i2<6; $i2++) $ar2[$i]['n'][] = $arr_2[$i2][$i];
}

// numere extrase
$nr_winer = [
  'p'=> [23, 34, 18, 44, 42],  // principale
  'n'=> [11, 9]  // norocoase
];

// numere comune cu primul rand $ar2[0] (pt al doilea rand e $ar2[1])
$nr_com = [
  'p'=> array_intersect($nr_winer['p'], $ar2[0]['p']),
  'n'=> array_intersect($nr_winer['n'], $ar2[0]['n'])
];

// Test
var_export($nr_com);  // arata ce contine $nr_com
// array ('p'=> array(0=> 23, 2=> 18), 'n'=> array(0=> 11))   

mybab
Exemplu de sus ii Ok
De vreo 4 ore imi bat capul cum sa pun in $ar2, in care $ar2[0] sa contina "principale" si "norocoase" cu numerele din primul rand, $ar2[1] cu cele din randul 2 si nu ii dau de cap.

La mine ii asa:

Cod: Selectaţi tot

$arr = explode(',', $variabila_cu_numere_din_baza_de_date); 
//var_export($arr) =  array ( 0 => '23 ', 1 => ' 14 ', 2 => ' 33 ', 3 => ' 44 ', 4 => ' 55 ', 5 => '6 ', 6 => ' 9', ) primele 5 sunt (principale) urmatoarele (2) sunt (norocoase);
  =array ( 0 => '24 ', 1 => ' 15 ', 2 => ' 36 ', 3 => ' 47 ', 4 => ' 59 ', 5 => '10 ', 6 => ' 3', ) primele 5 sunt (principale) urmatoarele (2) sunt (norocoase);
p23, p14, p33, p44, p55, n6, n9 // varianata 1 sau biletul 1 (ale mele)
p24, p15, p36, p47, p59, n10, n3 // varianata 2 sau biletul 2 (ale mele)
//daca explode ($ar2 = explode(',', $arr[0]);) imi arata asa: array ( 0 => '23 ', )array ( 0 => '24 ', ) adica prima coloana din cele doua variante
//daca verific cu var_export($ar2[0]) imi arata : '23 ''24' adica prima coloana din cele doua variante

Mersi MarPlo

MarPlo
Incearca sa folosesti variabila $arr din codul tau in loc de $arr din exemplu dat mai sus, care functioneaza.
In rest, nu mai pot sa ma bag pe acest script, e obositor.

mybab
Am facut tot asa cu ai facut tu si ii ok, dar nu stiu cum sa fac sa imi arate ca am pe primul bilet sau al doilea etc. ( de exemplu 3 numere comune "p" + 1numar"n") adica prin echo sa imi afiseza 3+1 //3p+1n
Nu gasesc cum sa incerc functia asta str_word_count imi numara cuvintele, cum as putea face?

MarPlo
Cred ca poti sa folosesti functia count() pentru array.
Exemplu:

Cod: Selectaţi tot

$nr_com = [
  'p'=> [22, 18],
  'n'=> [11]
];
echo count($nr_com['p']) .'+'. count($nr_com['n']);  // 2+1 

mybab
Era foarte simplu , mersi mult Marplo

Subiecte similare