0

このスクリプトは、配列内の要素を選択して出力します。

<?php
    $word = array("THE", "QUICK", "BROWN", "FOX", "JUMPS");
    $rand_keys = array_rand($word, 2);
    echo $word[$rand_keys[0]];
    echo $word[$rand_keys[1]];
?>

それは動作しますが、私はいくつかの機能を使用しています

array_diff();

私のスクリプトでは、$word変数から検索し、要素リストの例から削除します:

$word = array("THE", "QUICK", "BROWN", "FOX", "JUMPS");

$sentence = array("QUICK", "BROWN");

$input = array_diff($word, $sentence);

含まれて$inputarray("THE", "FOX", "JUMPS");ますよね?

そして、次のようにスクリプトに適用します。

<?php
    $word = array("THE", "QUICK", "BROWN", "FOX", "JUMPS");
    $sentence = array("QUICK", "BROWN");
    $input = array_diff($word, $sentence);
    $rand_keys = array_rand($input, 2);
    echo $input[$rand_keys[0]];
    echo $input[$rand_keys[1]];
?>

配列に3つの要素が含まれているため、機能します。さらにフィルタリングを行うと、

$input

変数には 1 つの要素のみが含まれます ex:スクリプト$inputのみが含まれarray("BROWN");、スクリプトはもう実行されず、次のようなエラーが発生します。

警告: array_rand(): 2 番目の引数は、1 から配列内の要素数の間でなければなりません

Notice: 未定義のインデックス: in

Notice: 未定義のインデックス: in

配列要素に1しか含まれていない場合、スクリプトを実行するにはどうすればよいですか?

私はここまで来ましたが、もっと良い解決策はありますか?

<?php
$word = array("THE", "QUICK", "BROWN", "FOX", "JUMPS");

if(count($input) >= 2)
{
    $rand_keys = array_rand($input, 2);
    echo $input[$rand_keys[0]] . "\n";
    echo $input[$rand_keys[1]] . "\n";
}
else
{
    echo end($input);
}
?>
4

1 に答える 1