2016-05-11 17 views
6

Po pierwsze, przepraszam, jeśli jest to źle sformułowane, ponieważ jestem początkującym w kodzie.Używanie zmiennych losowych w tablicach

Obecnie pracuję na kursie informatycznym online, jednak jestem bardzo zdezorientowany, jak wykonać jedną małą część. Do tego działania musimy użyć tablic, w których użytkownik ma wiele wyborów, a każdy inny wybór ma inny/unikalny tekst. Wszystko działa dobrze, z tym wyjątkiem, że potrzebuję opcji wyboru losowego wyboru, jednak jestem nieco zdezorientowany, jak to zrobić. Z mojego kodu możesz zobaczyć opcje 1-8. Chcę, żeby losowo wybrał jedną z opcji.

Oto mój kod:

<?php 
$train[0] = "Canada"; 
$train[1] = "Sahara Desert"; 
$train[2] = "Russia"; 
$train[3] = "Chernobyl"; 
$train[4] = "United States"; 
$train[5] = "North Korea"; 
$train[6] = "Germany"; 
$train[7] = "Hawaii"; 
?> 

<!DOCTYPE html> 
<html> 
<head> 
Took out everything here, it's not important. 
</head> 

    <body> 
     <center> 
    <h1>Vacation Time!</h1> 

    <h4>You and your family just won the lottery! You all want to go on vacation, but nobody can agree where to go. Inside each train cart has a card with a location written on it. Whatever you find is where you're going! </h4> 

     <form name="form1" action="activity-2-7-arrays-a.php" method="post"> 

      <label>Which cart on the train do you want to choose?</label> 
      <br> 
      <select name="cart" required> 
       <option value="1">First Cart</option> 
       <option value="2">Second Cart</option> 
       <option value="3">Third Cart</option> 
       <option value="4">Fourth Cart</option> 
       <option value="5">Fifth Cart</option> 
       <option value="6">Sixth Cart</option> 
       <option value="7">Seventh Cart</option> 
       <option value="8">Eight Cart</option> 
       <option value="show">Show all options</option> 
       <option value="any">Choose Randomly</option> 
       <br> 
      </select><br/> 
      <input type="submit" name="subButton" class="subButton" value="Go!"/><br/> 
      </form> 

    <h1><u>Final Results</u></h1> 

<?php 
if($_POST['subButton']) { 
    $cart = $_POST['cart']; 
    $roll = rand(1,9); 

    if($cart == show) { 
     for($x = 1; $x <= 9; $x++) { 
      echo "<p> You could have ender up in... </p>"; 
      echo "<h2> " . $train[$x] . "</h2>"; 
     } 
     return; 
    } 
    echo "<h2>"."Well, it looks like you're going to " . $train[$cart] . "! Have fun! </h2>"; 
} 
return; 

if ($cart == $roll) { 

} 
echo "<h2>"."Can't handle the pressure? You were selected to go to " . $train[$roll] . "! Have fun! </h2>"; 
?> 

Jestem pewien, że to jest trochę brudny, również. Mam nadzieję, że rozumiesz o co mi chodzi. Jeśli jesteś w stanie wyjaśnić mi odpowiedź, byłoby to niezwykle pomocne. Dziękuję :)

+0

Twój test 'if ($ cart == $ roll)' jest nieprawidłowy. Porównujesz wybór użytkownika z generowaną losową liczbą. Przyjrzyj się bliżej innym swoim stwierdzeniom, i myślę, że możesz to zrozumieć. –

+0

Jest kilka problemów z kodem: Najpierw powinieneś zmienić 'if ($ cart == show)' na 'if ($ cart == 'show')'. Po drugie, powinieneś zdefiniować $ train jako tablicę, więc umieść '$ train = array()' na górze. Aby odpowiedzieć na twoje pytanie, myślę, że powinieneś użyć 'array_shuffle()' na $ train, aby wybrać losowo listę. –

+0

Powinieneś wstawić 'array_shuffle ($ train);' zanim wyświetlisz wynik ("Wygląda na to, że zamierzasz ..."). Ponadto, wszystkie rzeczy z drugiej instrukcji 'return;' nie będą działać z powodu 'return;', ale i tak tego nie potrzebujesz. –

Odpowiedz

3

Jesteś losowo generować wartość niezależnie od wyboru użytkownika i porównując ją z wyborem użytkownika i innych dziwnych rzeczy.

<?php 
if($_POST['subButton']) { 
    $cart = $_POST['cart']; 
    $roll = rand(1,9); 

Generujesz losową wartość przed sprawdzeniem, czy użytkownik wybrał opcję "Wybierz losowo" i dlaczego generuje losowanie z zakresu od 1 do 9? Twój $train tablicy zaczyna się od indeksu 0, a kończy o indeksie potrzebuje 7.

if($cart == show) { 

String być cytowane.

 for($x = 1; $x <= 9; $x++) { 

Ponownie zapętlenie $x od 1 do 9 nie ma sensu, ponieważ z indeksów tablicy.

  echo "<p> You could have ender up in... </p>"; 
      echo "<h2> " . $train[$x] . "</h2>"; 

zakończy się niepowodzeniem przy $x osiąga 8 od ostatniego indeksu w $train jest 7.

 } 
     return; 
    } 
    echo "<h2>"."Well, it looks like you're going to " . $train[$cart] . "! Have fun! </h2>"; 
    } 
    return; 

Jeśli więc użytkownik nie wybrał opcji "Pokaż wszystkie opcje", pokazuje mu swoją wybraną lokalizację. Jeśli użytkownik wybrał opcję "Wybierz losowo", to się nie powiedzie, ponieważ $cart ma wartość "dowolne", a $train['any'] nie istnieje.

Oto kod z prawidłową logiką.

<?php 
if($_POST['subButton']) { 
    $cart = $_POST['cart']; 
    if ($cart == 'any') {// Check if user selected 'Choose Randomly' 
     $roll = rand(0, 7); 
     echo "<h2>"."Can't handle the pressure? You were selected to go to " . $train[$roll] . "! Have fun! </h2>"; 
    } 
    else { 
     if ($cart == 'show') { // If user selected 'Show all options' 
      echo "<p> You could have ender up in... </p>"; 
      for($x = 0; $x <= 7; $x++) { 
       echo "<h2> " . $train[$x] . "</h2>"; 
      } 
     } 
     else { // User selected cart so show him chosen location 
      echo "<h2>"."Well, it looks like you're going to " . $train[$cart] . "! Have fun! </h2>"; 
     } 
    } 
} 
?> 
1

Czego szukasz array_rand():

$random = array_rand($train); 
+0

Rozwiązuje to inny problem niż OP próbuje rozwiązać. –

+0

@JoelLee Touche - za wcześnie rano tutaj! – Darren

+1

@Darren Masz na myśli * "Dotyk" * - hahaha, przepraszam, diabeł zmusił mnie do tego. * grin * –

2

Oto niektóre problemy w kodzie

  1. skąd i dlaczego return?
  2. żadnych zamykania znaczników html

chciałbym zmienić ostatnią część php-kod tak:

<?php 
if ($_POST['subButton']) { 
    $cart = $_POST['cart']; 
    $value = intval($cart); 
    $roll = mt_rand(1, 8); // mt_rand() has more entropy than rand() 

    if ($cart == 'show') { 
     // show target locations (according the OP-source) 
     for($x = 1; $x <= 8; $x++) { 
      echo "<p> You could have ender up in... </p>"; 
      echo "<h2> " . $train[$x-1] . "</h2>"; 
     } 
    } else if ($value > 0 && $value <= 8) { 
     echo "<h2>"."Well, it looks like you're going to " . $train[$value-1] . "! Have fun! </h2>"; 
     // idk why it needed, but move it here 
     if ($value == $roll) { 
     } 
    } else if ($cart == 'any') { 
     echo "<h2>"."Can't handle the pressure? You were selected to go to " . $train[$roll-1] . "! Have fun! </h2>"; 
    } else { 
     // $_POST['cart'] has something wrong 
    } 
} 
?> 
<!-- lines below was added to close html-tags --> 
</body> 
</html> 
1

Zamiast rand() korzystanie mt_rand() ponieważ PHP DOCUMENTATION dosłownie mówi

mt_rand - Generuj lepszą losową wartość

Jeśli chodzi o twój kod php, masz dużo błędów. To w jaki sposób dolny kod php powinien wyglądać:

<?php 
    if($_POST['subButton']) 
    { 
    $cart = $_POST['cart']; 
    $roll = mt_rand(0,7); 
     //0-7 because those are the values you inserted into 
     //the $train[] array 

    if($cart == 'show') { 
     //another correction here, it has to be 0-7 
     for($x = 0; $x <= 7; $x++) { 
     echo "<p> You could have ender up in... </p>"; 
     echo "<h2> " . $train[$x] . "</h2>"; 
     } 
    } 
    else if ($cart!='any') 
    { 
     "<h2>Well, it looks like you're going to " . $train[$cart] . "! Have fun! </h2>"; 
    } 
    else //took out return and placed an else 
    { 
     echo "<h2>Well, it looks like you're going 
     to " . $train[$cart] . "! Have fun! </h2>"; 
    } 

?> 
Powiązane problemy