更好的解决方案?

Posted

技术标签:

【中文标题】更好的解决方案?【英文标题】:better solution? 【发布时间】:2013-11-23 17:46:09 【问题描述】:

这个脚本在数组中挑选元素并打印出来。

<?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);

所以$input 包含array("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 个元素。如果我做更多过滤

$输入

变量仅包含 1 个元素,例如:$input 仅包含 array("BROWN"); 脚​​本将不再运行并出现如下错误:

警告:array_rand():第二个参数必须介于 1 和 数组中的元素个数

注意:未定义索引:in

注意:未定义索引: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);

?>

【问题讨论】:

这个脚本的目标是什么;即您希望最终输出是什么?尝试从长度为 1 的数组中选择随机键没有任何意义。 最终输出是我希望脚本在我进行过滤时继续运行,就像它只包含 1 个元素我显示最后一个元素而不是错误 【参考方案1】:

错误信息简单易懂。您不能在array_rand() 的第二个参数中使用大于元素计数的数字。

在调用这个函数之前检查元素的数量,如果它只有一个,使用这个元素而不调用array_rand()。当你完全没有元素时,也要做好准备。

【讨论】:

我回答了我的问题,按照你告诉我的做了,还有其他更好的解决方案吗?喜欢使用 for 循环? @Destiny 不要将循环用于可以通过 if 进行检查的事情。 @ElonThan 我的代码中有类似的错误,但前提是数组中有'test'关键字。

以上是关于更好的解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

在父悬停时更改子颜色的更好解决方案

需要更好的等待解决方案

寻找一个更好的解决方案然后是一个数组列表[关闭]

格式化串行有更好的解决方案吗?

关于日期的 C++ 不完整代码,更好的解决方案是啥?

在线/离线用户功能 Firestore 或实时的更好解决方案是啥?