2015-12-13 2 views
0

В словесной игры с 2 игроками я хотел бы дать 7 случайных букв для каждого игрока в 5.3 функции PHP, создавая новую игру:Move 7 случайных элементов из одного массива в другой

$LETTERS = array('*', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); 
$NUMBERS = array( 2, 10, 3, 5, 3, 5, 9, 2, 2, 8, 4, 6, 4, 5, 8, 10, 6, 6, 6, 5, 3, 1, 2, 1, 2, 1, 1); 

function createGame($dbh, $uid) { 
     global $LETTERS, $NUMBERS; 
     $letters = array(); 
     $letters1 = array(); 
     $letters2 = array(); 

     for ($i = 0; $i < count($LETTERS); $i++) { 
       $letter = $LETTERS[$i]; 
       $number = $NUMBERS[$i]; 

       for ($n = 0; $n < $number; $n++) { 
         array_push($letters, $letter); 
       } 
     } 

     for ($i = 0; $i < 7; $i++) { 
       /* TODO move random letter from $letters to $letter1 */ 
       /* TODO move random letter from $letters to $letter2 */ 
     } 

     $sth = $dbh->prepare('insert into games (player1, stamp1, stamp2, letters1, letters2, letters, board) values (?, unix_timestamp(now()), 0, ?, ?, ?, space(225))'); 
     $sth->execute(array($uid, join('', $letters1), join('', $letters2), join('', $letters))); 
     return $dbh->lastInsertId(); 
} 

Я знаю, что array_rand() может использоваться для выбора случайного элемента из массива.

Но как использовать его здесь наиболее эффективным способом перемещения буквы из массива $letters?

UPDATE:

Я попытался следующие, но первые 7 букв не удаляются от начала исходного массива, почему?

shuffle($letters); 
    $letters1 = array_slice($letters, 0, 7); 
    $letters2 = array_slice($letters, 0, 7); 
+1

Вы можете 'перетасовка()' массив, а затем просто взять 0-6 элементов для игрока 1 и 7-13 для игрока 2 с 'array_slice()' – Rizier123

+0

Я попытался 'перетасовать ($ букв) ; $ letters1 = array_slice ($ letters, 0, 7); '- но первые 7 букв не удаляются с начала массива' $ letters'. Ты знаешь почему? –

+1

Если вы хотите удалить их, вы хотите посмотреть: 'array_splice()' – Rizier123

ответ

1

Я бы перетасовать массив букв и удалить первый элемент массива shuffeld, чтобы получить одну случайную букву.

shuffle($letters); // Mix alle array elements 
for ($i = 0; $i < 7; $i++) { 
    $letters1[] = array_shift($letters); // get first array element, removing it from $letters 
    $letters2[] = array_shift($letters); // get first array element, removing it from $letters 
} 
1

Вы можете использовать array_diff:

$letters = array_diff($letters, $letter1); 
$letters = array_diff($letters, $letter2); 
Смежные вопросы