php array 6-ти сторонний выпуск Dice Roll Tally

Я надеялся, что кто-нибудь сможет выяснить, почему мой код не работает для шестигранных кубиков, подсчитывающих числа для 6000 бросков с использованием массивов.

<?php
//  main    //////////////////////////////////
//$throw_dice = array();
//$tally = array();
echo "debug - code runs to this point<br>\n";

$throw_dice = throw_dice($throw_dice);
$tally = tally_results($throw_dice);
echo "debug with tally: $tally[4]<br>\n";
exit;
$line = print_table($tally);
echo $line;// functions ////////////////////////////////

function throw_dice ($f_throw_dice) {
/*  required pseudocode:
for loop from 1 to 6000
populate each element with random number 1 - 6
end for loop
return array
*/
for ($i = 0; $i < 6000; $i++) {
$f_throw_dice[] = mt_rand(1,6);
}
return array($f_throw_dice);
}

function tally_results ($f_throw_dice) {
/*
use increment system example shown below with associative array:
$numbers = array(1, 2, 2, 1, 2, 1, 1, 1, 2)
foreach ($numbers as $number) {$tally[$number]++}
will give 5 for $tally[1] and 4 for $tally[2]
*/
//$tally = array('1' => 1,'2' => 2,'3' => 3,'4' => 4,'5' => 5,'6' => 6,);
//$numbers = array($f_throw_dice);
//$tally[0] = '1';
//$tally[1] = '2';
//$tally[2] = '3';
//$tally[3] = '4';
//$tally[4] = '5';
//$tally[5] = '6';
$tally = array();
foreach ($f_throw_dice as $number)
{
$tally[$number]++;
echo $tally;

}
}function print_table($f_tally) {
/*  required pseudocode:
note: concatenate entire formatted printout in one variable $line
Can start this way:
$line = "<pre>";
$line .= sprintf ("DIE #%10s", 'OCCURS');
$line .= "\n===============\n";
sort $f_tally by key
foreach loop
concatenate $line with another $f_tally element using the
sprintf format from last assignment
end loop
return $line
*/
$line = "<pre>";
$line .= sprintf ("DIE #%10s", 'OCCURS');
$line .= "\n===============\n";
ksort ($f_tally);
echo '<ul>';
foreach ($f_tally as $numbers => $tally) {
echo '<pre>',
$line .= sprintf('%s        %s', $numbers, $tally), '</pre>';
// echo '<li>$numbers ($tally)</li>';
}
echo '</ul>';
}
?>

Результат должен выглядеть примерно так:

DIE #   OCCURS
==============
1         1000
2          990
3         1038
4         1012
5         1007
6          953

0

Решение

Несколько вопросов.

1) в throw_dice функция, изменение:

return array($f_throw_dice);

…чтобы:

return $f_throw_dice;

$f_throw_dice это уже массив. Таким образом, оборачивая его в функцию массива, вы добавляете дополнительный слой к вашему массиву, что вызывает цикл в tally_results Функция потерпеть неудачу. Так что просто return $f_throw_dice как есть.

2) И в tally_results функция, изменение:

foreach ($f_throw_dice as $number)
{
$tally[$number]++;
echo $tally;

}

…чтобы:

foreach ($f_throw_dice as $number)
{
$tally[$number]++;
}
return $tally;

Здесь ты не вернешься $tally от функции, а скорее echoЭто делается один раз для каждого цикла на кубиках. Вместо этого подождите, пока цикл не закончится return Это.

3) Затем в print_table функция, изменение:

echo '<ul>';
foreach ($f_tally as $numbers => $tally) {
echo '<pre>',
$line .= sprintf('%s        %s', $numbers, $tally), '</pre>';
// echo '<li>$numbers ($tally)</li>';
}
echo '</ul>';

…чтобы:

$line .=  '<ul>';
foreach ($f_tally as $numbers => $tally) {
$line .=  '<pre>';
$line .= sprintf('%s        %s', $numbers, $tally) .  '</pre>';
// echo '<li>$numbers ($tally)</li>';
}
$line .=  '</ul>';
return $line;

И вот вы начинаете строить, а затем переключиться на echoи, опять же, вы ничего не возвращаете из этой функции. Итак, вместо echoрезультаты сохраняются в $line переменная, а затем повторить его в конце функции.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector