在For循环中循环 - PHP

时间:2013-12-30 00:31:52

标签: php loops for-loop do-while

我正在尝试实现列出的随机符号集列表。这似乎是一项简单的任务,但......

到目前为止,这是我的代码......

$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] . '&nbsp;&nbsp;&nbsp;';
        }
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的列表。我不知道如何/为什么会发生这种情况或如何解决它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的代码似乎有点复杂。看起来你只是不想重复这些符号。

$symbol_array = array('&sect;', '$', '#', '@', '&hearts;', '?', '&#9733;', '&triangle;', '&smile;', '!', '&#8710;', '&#8224;', '&infin;', '&#9793;', '&#9739;', '&spades;', '&clubs;', '&#9834;', '&#9835;', '&#9788;', '&#1769;');

$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('&nbsp;&nbsp;&nbsp;', $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('&sect;', '$', '#', '@', '&hearts;', '?', '&#9733;', '&triangle;', '&smile;', '!', '&#8710;', '&#8224;', '&infin;', '&#9793;', '&#9739;', '&spades;', '&clubs;', '&#9834;', '&#9835;', '&#9788;', '&#1769;');             

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] . '&nbsp;&nbsp;&nbsp;';
   }                                                                 

   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;                                                          
   }                                                                 
}                                                                    

你真的可以重现这个吗?