0

我有一个从 0 到 100 的数组。

我需要为每个附加正确的后缀(st、nd、rd、th),然后按照最后一条评论 IE “1st、2nd、3rd、4th、5th(等到最后一个元素)”中的说明显示它。<- 以“.”结尾 而不是 ", "

一直在寻找类似风格的问题仍然无法得出正确的解决方案。

<?php

$winners = range(0, 100); // scaleable winners of /r/aww contest
// print_r($winners); // test above line
$last = count($winners)-1;
while (!$mywinner){ // ensure my Dog does not get 0th place
    $mywinner = array_rand($winners); // randomly select my Dog's winning spot
}
echo $mywinner . '<br>'; // check my Dog's winning place to verify it's not being echoed below; comment this line upon completion
unset($winners[$mywinner]); // remove my Dog from list of other winners
// print out all winners except my dog
foreach ($winners as $place){ // run foreach loops on every winner to attach suffix
    switch ($place){ //use switch to set what suffix to attach to winner's place
        case 11: // make sure 11th place gets th suffix, not st
            $place .= "th ";
            break;
        case 12:// make sure 12th place gets th suffix, not nd
            $place .= "th ";
            break;
        case 13:// make sure 13th place gets th suffix, not 3rd
            $place .= "th ";
            break;
        case substr($place, -1) == 1: // check places ending in 1 at append 'st' suffix
            $place .= "st ";
            break;
        case substr($place, -1) == 2:// check places ending in 2 at append 'nd' suffix
            $place .= "nd ";
            break;
        case substr($place, -1) == 3:// check places ending in 3 at append 'rd' suffix
            $place .= "rd ";
            break;
        default: // default suffix for every other place
            $place .= "th ";
            break;
            }
    if ($place != 0){
        echo (implode(", ", explode(" ", $place)));// echo as format "1st, 2nd, 3rd, 4th, (etc to end), 100th." end with period (need fixing)
        }
    }
?>

我是如此接近。我在这里俯瞰什么?

4

2 回答 2

0

我认为这就是您想要的,进行了几次调整,编写了一个数组来收集值,然后用逗号将数组内爆并添加句号

 <?php

$winners = range(1, 100); // scaleable winners of /r/aww contest

$winners = array_combine($winners, $winners);//match keys to values

$mywinner = array_rand($winners); // randomly select my Dog's winning spot

echo $mywinner . '<br>'; // check my Dog's winning place to verify it's not being echoed below; comment this line upon completion
unset($winners[$mywinner]); // remove my Dog from list of other winners
// print out all winners except my dog
foreach ($winners as $place){ // run foreach loops on every winner to attach suffix
        switch ($place){ //use switch to set what suffix to attach to winner's place
            case 11: // make sure 11th place gets th suffix, not st
                $place .= "th";
                break;
            case 12:// make sure 12th place gets th suffix, not nd
                $place .= "th";
                break;
            case 13:// make sure 13th place gets th suffix, not 3rd
                $place .= "th";
                break;
            case substr($place, -1) == 1: // check places ending in 1 at append 'st' suffix
                $place .= "st";
                break;
            case substr($place, -1) == 2:// check places ending in 2 at append 'nd' suffix
                $place .= "nd";
                break;
            case substr($place, -1) == 3:// check places ending in 3 at append 'rd' suffix
                $place .= "rd";
                break;
            default: // default suffix for every other place
                $place .= "th";
                break;
            }

            $out[]=$place;// echo as format "1st, 2nd, 3rd, 4th, (etc to end), 100th." end with period (need fixing)

    }

    echo implode(', ',$out).'.';

演示:http: //ideone.com/RgDs9N

于 2016-05-21T04:08:36.563 回答
0

这是我的做法:

<?php

$mywinner = 0;
$winners = range(1, 100); // Start at 1 to avoid having to avoid 0.
$mywinner = array_rand($winners);

echo $mywinner . "<br>\n";
unset($winners[$mywinner - 1]); // Subtract 1 since we started at 1.

// Function to get the ordinal of a number.
function getOrdinal($number)
{
    // If this is 11-13, or 111-113, etc., use 'th'.
    if (($number % 100) >= 11 && ($number % 100) <= 13) {
        return sprintf('%dth', $number);
    }

    // Suffixes for each one's place.
    $endings = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'];
    return sprintf('%d%s', $number, $endings[($number % 10)]);
}

// The array_map() here will run getOrdinal() on each of the winners,
// and return it as a new array, which we then implode.
echo implode(', ', array_map('getOrdinal', $winners)) . ".\n";

我的输出:

3<br>
1st, 2nd, 4th, 5th, 6th, 7th, 8th, 9th, 10th, 11th, 12th, 13th, 14th, 15th, 16th, 17th, 18th, 19th, 20th, 21st, 22nd, 23rd, 24th, 25th, 26th, 27th, 28th, 29th, 30th, 31st, 32nd, 33rd, 34th, 35th, 36th, 37th, 38th, 39th, 40th, 41st, 42nd, 43rd, 44th, 45th, 46th, 47th, 48th, 49th, 50th, 51st, 52nd, 53rd, 54th, 55th, 56th, 57th, 58th, 59th, 60th, 61st, 62nd, 63rd, 64th, 65th, 66th, 67th, 68th, 69th, 70th, 71st, 72nd, 73rd, 74th, 75th, 76th, 77th, 78th, 79th, 80th, 81st, 82nd, 83rd, 84th, 85th, 86th, 87th, 88th, 89th, 90th, 91st, 92nd, 93rd, 94th, 95th, 96th, 97th, 98th, 99th, 100th.
于 2016-05-21T06:36:51.363 回答