[PHP] Getal splitsen en 2 van de 5 random kiezen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

15/07/2014 17:44:20
Quote Anchor link
Hoi,

Ik heb voor een script nodig dat een getal (bijvoorbeeld 5) gesplitst word in 1, 2, 3, 4 en 5. Dit is niet zo lastig, ik heb gewoon een while loop gemaakt. Nu wil ik alleen dat er 2 van de 5 (bijvoorbeeld) random gekozen worden en dat daar nog iets achter komt. Dus dit is wat ik wil als output:

5. Gekozen
4.
3. Gekozen
2.
1.

Hoe is dit het beste mogelijk?

Alvast bedankt :)
 
PHP hulp

PHP hulp

19/04/2024 16:45:19
 
- SanThe -

- SanThe -

15/07/2014 18:13:41
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// array grootte
$getal = 5;
// aantal dat gekozen moet worden
$tekiezen = 2;
// tekst
$waarde = 'Gekozen';
// het array maken
$array = range(0, $getal);
// de nul waarde verwijderen
unset($array[0]);
// for loop van het aantal
for($i=0; $i<$tekiezen;  $i++)
{

   do
   {
      // random kiezen
      $rand = rand(1, $getal);
   }
// doorgaan als reeds gekozen
   while($array[$rand] == $waarde);
   // gekozen in het array zetten
   $array[$rand] = $waarde;
}

// resultaat
echo '<pre>'.print_r($array,true).'</pre>';
?>
 

15/07/2014 19:20:16
Quote Anchor link
Dankjewel, het werkt!

Is het ook mogelijk om meerdere dingen te krijgen?
Dus dat je array er zo uitziet:

Array
(
[1] => 1
[2] => 3
[3] => 3
[4] => 2
[5] => 1
[6] => 3
[7] => 2
[8] => 2
[9] => 1
)
 
Eddy E

Eddy E

15/07/2014 19:30:37
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// het array maken
$array = range(0, $getal);
// de nul waarde verwijderen
unset($array[0]);
?>


Waarom dan niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// het array maken
$array = range(1, $getal);
?>


Toevoeging op 15/07/2014 19:33:00:

Luit Hollander op 15/07/2014 19:20:16:
Dankjewel, het werkt!

Is het ook mogelijk om meerdere dingen te krijgen?
Dus dat je array er zo uitziet:

Array
(
[1] => 1
[2] => 3
[3] => 3
[4] => 2
[5] => 1
[6] => 3
[7] => 2
[8] => 2
[9] => 1
)


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$max
= 5;
$aantal_in_array = 10;
array_fill(0, $aantal_in_array, array_rand(range(1, $max));
?>
 
- SanThe -

- SanThe -

15/07/2014 21:12:25
Quote Anchor link
Eddy E op 15/07/2014 19:30:37:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// het array maken
$array = range(0, $getal);
// de nul waarde verwijderen
unset($array[0]);
?>


Waarom dan niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// het array maken
$array = range(1, $getal);
?>


Ik wilde beginnen met key 1 en niet met key 0
 

16/07/2014 09:51:08
Quote Anchor link
Eddy E op 15/07/2014 19:30:37:


Ik bedoel niet dat het random is, maar bijvoorbeeld dit

$aantal1 = 2;
$aantal2 = 1;
$aantal3 = 5;

Array
(
[1] => 1
[2] => 3
[3] => 3
[4] => 2
[5] => 3
[6] => 1
[7] => 3
[8] => 3
)

Dus dat er echt 5 keer 3 bij een random getal komt.

Alvast bedankt!
 
M Ypma

M Ypma

16/07/2014 16:14:43
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

// welke waarde je hoevaak voor wilt laten komen
$values = array(
    '1' => 2,
    '2' => 1,
    '3' => 5
);

$array = array();
foreach( $values as $k => $v )
{

    for( $i=0; $i<$v; $i++ )
    {

        $array[] = $k;
    }
}


shuffle( $array);

var_dump( $array );
/*
array (size=8)
  0 => int 3
  1 => int 3
  2 => int 2
  3 => int 3
  4 => int 1
  5 => int 3
  6 => int 3
  7 => int 1
*/

?>
 

16/07/2014 16:41:53
Quote Anchor link
Dankjullie wel, het is gelukt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.