我正在尝试实现列出的随机符号集列表。这似乎是一项简单的任务,但......
到目前为止,这是我的代码......
$symbol_array = array('§', '$', '#', '@', '♥', '?', '★', '▵', '⌣', '!', '∆', '†', '∞', '♁', '☋', '♠', '♣', '♪', '♫', '☼', '۩');
$num1 = mt_rand(4, 10);
$ans = pow($num1, 3);
$symbols_selected_array = array();
for($x = 0; $x < $num1; $x++){
do{
$symbol = $symbol_array[array_rand($symbol_array)];
} while(in_array($symbol, $symbols_selected_array));
$symbols_selected_array[] = $symbol;
$symbols .= $symbols_selected_array[$x] . ' ';
}
print_r($symbols_selected_array);
echo '<br><br>' . count($symbols_selected_array);
echo '<br><br>' . strlen($symbols);
echo '<br><br>' . $symbols;
$num1
的设置决定了将显示多少个符号(4-10)。问题是,在极少数情况下,会有一个超过10的列表。我不知道如何/为什么会发生这种情况或如何解决它。
有什么想法吗?
答案 0 :(得分:1)
您的代码似乎有点复杂。看起来你只是不想重复这些符号。
$symbol_array = array('§', '$', '#', '@', '♥', '?', '★', '▵', '⌣', '!', '∆', '†', '∞', '♁', '☋', '♠', '♣', '♪', '♫', '☼', '۩');
$num1 = mt_rand(4, 10);
$ans = pow($num1, 3); // You never use this?
shuffle($symbol_array);
$symbols_selected_array = array_slice($symbol_array, 0, $num1);
$symbols = implode(' ', $symbols_selected_array);
print_r($symbols_selected_array);
echo '<br><br>' . count($symbols_selected_array);
echo '<br><br>' . strlen($symbols);
echo '<br><br>' . $symbols;
答案 1 :(得分:0)
你绝对确定count($symbols_selected_array) > 10
会发生吗?我只是尝试在一个循环中运行你的代码一百万次,检查一个大于10的列表。
$symbol_array = array('§', '$', '#', '@', '♥', '?', '★', '▵', '⌣', '!', '∆', '†', '∞', '♁', '☋', '♠', '♣', '♪', '♫', '☼', '۩');
for ($i = 0; $i < 1000000; $i++) {
$num1 = mt_rand(4, 10);
$symbols_selected_array = array();
for($x = 0; $x < $num1; $x++){
do{
$symbol = $symbol_array[array_rand($symbol_array)];
} while(in_array($symbol, $symbols_selected_array));
$symbols_selected_array[] = $symbol;
$symbols .= $symbols_selected_array[$x] . ' ';
}
if (count($symbols_selected_array) > 10) {
print "$num1<br/>\n";
print_r($symbols_selected_array);
echo count($symbols_selected_array);
echo "<br/><br/>\n";
echo strlen($symbols);
echo "<br/><br/>\n";
echo $symbols;
echo "<br/><br/>\n";
exit;
}
}
你真的可以重现这个吗?