1
ksort ($votes);
        foreach ($votes as $total => $contestant){
        $ordervotes[]= $contestant;
        } 

        echo "<li> And the winner is: {$ordervotes[4]}</li>";
        echo "<li> And the loser is: {$ordervotes[0]}</li>";
        echo "<li> {$ordervotes[1]} came second last</li>";

これは、「$total」がどれも同じでない場合に正常に機能し、同じ場合はエラー コードが表示されます。「最大/最小」を使用して配列の最初と最後の要素を取得できることはわかっていますが、最後から 2 番目の要素を見つけるにはどうすればよいですか?

ありがとうございました

ジョー

4

4 に答える 4

1

試してみませんか:

echo $votes[count($votes)-2];

また、別の配列に同じ値を設定する必要はありません$votesまた、キーではなくで配列をソートすることを検討することもできます(これはあなたがやろうとしていると思います)。


重複したキーが予想される場合は、データの保存方法を変更する必要があります。多次元配列の使用を検討してください。

$votes = array(
   array('name'=>'John','vote'=>10),
   array('name'=>'James','vote'=>11),
   array('name'=>'Jimmy','vote'=>13),
);

この関数とコードを使用して、この配列を並べ替えることができます。

// This function will sort your array
function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

// Sort the array by the 'vote' key
aasort($votes,"vote");

// Echo out the name of the second-last person
echo $votes[count($votes)-2]['name'];
于 2013-01-27T16:14:12.000 に答える
0

これを使って:

function secondMax($arr) {
    $max = $second = 0;
    $maxKey = $secondKey = null;

    foreach($arr as $key => $value) {
        if($value > $max) {
            $second = $max;
            $secondKey = $maxKey;
            $max = $value;
            $maxKey = $key;
        } elseif($value > $secondMax) {
            $second = $value;
            $secondKey = $key;
        }
    }

    return array($secondKey, $second);
}

使用法:

$second = secondMax($votes);

于 2013-01-27T16:12:02.407 に答える
0

関数 count を使用して取得できます。

$ordervotes[ (count($ordervotes)-2) ]
// the array starts with index 0, so (count($ordervotes)-1) is the last element
于 2013-01-27T16:13:52.540 に答える
0

あなたの変数に何が入っているのかわかりません$votes...どうすれば同じ票を持つ(同じキーを持つ)複数の競技者を持つことができますか?

ここに誤りがあると思います。

$votes は次のようになります。

$votes = array(
    'contestant 1' => 8,
    'contestant 2' => 12,
    'contestant 3' => 3
);

次に、配列を注文します。sort($votes)

最後に、最後から 2 番目を取得します。$votes[count($votes) - 2];

于 2013-01-27T16:15:52.090 に答える