2016-05-11 19 views
6

Trước hết, xin lỗi nếu điều này được diễn đạt kém, vì tôi là người mới bắt đầu theo mã.Sử dụng các biến ngẫu nhiên bên trong các mảng

Tôi hiện đang làm việc trên một khóa học khoa học máy tính trực tuyến, tuy nhiên tôi khá bối rối về cách thực hiện một phần nhỏ. Chúng tôi cần sử dụng mảng cho hoạt động này, trong đó người dùng có nhiều lựa chọn và mỗi lựa chọn khác nhau có đầu ra văn bản khác nhau/duy nhất. Tất cả mọi thứ hoạt động tốt, ngoại trừ tôi cần một tùy chọn để chọn một lựa chọn ngẫu nhiên, tuy nhiên tôi là một chút bối rối về cách làm cho nó. Bạn có thể thấy từ mã của tôi các tùy chọn 1-8. Tôi muốn nó chọn ngẫu nhiên một trong các lựa chọn.

Dưới đây là mã của tôi:

<?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>"; 
?> 

Tôi chắc chắn đó là một chút lộn xộn, cũng có. Hy vọng rằng bạn hiểu ý tôi. Nếu bạn có thể giải thích câu trả lời cho tôi, điều đó sẽ cực kỳ hữu ích. Cảm ơn bạn :)

+0

Bài kiểm tra của bạn 'if ($ cart == $ roll)' là sai. Bạn đang so sánh lựa chọn của người dùng với số ngẫu nhiên bạn vừa tạo. Hãy xem xét các câu lệnh khác của bạn nếu có, và tôi nghĩ bạn có thể tìm ra nó. –

+0

Có một số vấn đề với mã: Đầu tiên bạn nên thay đổi 'if ($ cart == show)' thành 'if ($ cart == 'show')'. Thứ hai, bạn nên định nghĩa $ train như một mảng để đặt '$ train = array()' ở trên cùng. Để trả lời câu hỏi của bạn, tôi nghĩ bạn nên sử dụng 'array_shuffle()' trên $ train để ngẫu nhiên danh sách. –

+0

Bạn nên đặt 'mảng_shuffle ($ train);' trước khi bạn lặp lại kết quả ("Vâng, có vẻ như bạn sẽ ..."). Ngoài ra, tất cả các công cụ trong câu lệnh 'return;' thứ hai sẽ không chạy vì 'return;', nhưng bạn không cần anyways đó. –

Trả lời

3

Bạn đang tạo ngẫu nhiên một giá trị bất kể lựa chọn của người dùng và so sánh nó với lựa chọn của người dùng và những điều kỳ lạ khác.

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

Bạn đang tạo một giá trị ngẫu nhiên trước khi kiểm tra xem người dùng đã chọn 'Chọn ngẫu nhiên' và tại sao tạo ngẫu nhiên từ 1 đến 9? Mảng $train của bạn bắt đầu bằng chỉ mục 0 và kết thúc bằng chỉ mục 7.

Chuỗi cần được trích dẫn.

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

Lặp lại vòng lặp $x từ 1 đến 9 không có ý nghĩa vì chỉ mục mảng của bạn.

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

Sẽ thất bại khi $x đạt 8 kể từ khi chỉ số cuối cùng trong $train là 7.

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

Vì vậy, nếu người dùng không chọn 'Hiển thị tất cả các tùy chọn', bạn sẽ hiển thị vị trí mà mình đã chọn. Nếu người dùng chọn 'Chọn ngẫu nhiên' điều này sẽ thất bại vì $cart sẽ có giá trị 'bất kỳ' và $train['any'] không tồn tại.

Đây là mã có logic chính xác.

<?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

gì bạn đang tìm kiếm là array_rand():

$random = array_rand($train); 
+0

Điều này giải quyết một vấn đề khác với OP đang cố gắng giải quyết. –

+0

@JoelLee Touche - quá sớm vào buổi sáng ở đây! – Darren

+1

@ Darren Ý bạn là * "Touché" * - hahaha, xin lỗi, ma quỷ đã khiến tôi làm điều đó. * cười * –

2

Dưới đây là một số vấn đề trong các mã

  1. từ đâu và tại sao chúng ta return?
  2. không đóng cửa html tags

tôi sẽ thay đổi phần cuối của php-code như thế:

<?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

Thay vì rand() sử dụng mt_rand()PHP DOCUMENTATION nghĩa đen nói

mt_rand - Tạo giá trị ngẫu nhiên tốt hơn

Về mã php của bạn, bạn có rất nhiều lỗi. Đây là cách mã php dưới cùng của bạn nên xem xét:

<?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>"; 
    } 

?> 
Các vấn đề liên quan