2013-12-09 65 views
2

我有一个数组显示如下结果:显示和随机化PHP数组

Array 
(
    [0] => 71 
    [1] => 56 
    [2] => 64 
    [3] => 82 
    [4] => 90 
    [5] => 80 
    [6] => 65 
    [7] => 62 
    [8] => 14 
    [9] => 3 
) 

我的代码是:

while($row = mysql_fetch_assoc($result)) 
{ 

    $show[] = $row['number']; 

} 
    echo '<pre>'; print_r($show); 

如何可以随机数组内容,并显示它们作为5位数字仅Ë :克

+1

您如何到达结果'71 64 14 80 82'? –

+0

不,我得到的结果如上面的阵列上显示 – Des

回答

4

我将与shuffle去随机化阵列,每获得德数组的5个元素,这真的取决于你的需要,有什么事你到底想要完成,得到了第5种元素,最后一个或其他逻辑。

+0

Yess简单的方法来给范围&洗牌吧.. – Ashish

+1

<?php $ numbers = range(10,99); shuffle($ numbers); foreach($ number为$ number){ echo“$ number”; } ?> – Ashish

2

试试这个:

$arr=array(); 
for ($i=0;$i<5;$i++) 
{ 
$arr[i]=$items[array_rand($items)]; 
} 

$arr包含结果

0

就应该得到这个查询不知道,但您也可能会使用

SELECT number 
FROM SomeTable 
ORDER BY RAND() 
LIMIT 5 

但是请注意,ORDER BY RAND ()效率很低,因此只适用于处理少量行的情况。但是,如果您要带回大量的行,那么在PHP中执行操作也是低效的。

还有一种更有效的方法可以返回一个随机行,所以如果你有很多行,可能值得高效地检索单行5次并将结果联合在一起(尽管你需要考虑的可能性,随机行可能是重复的

例如(而不是真正与这个幸福): - 。

(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
UNION 
(SELECT r1.number 
FROM SomeTable AS r1 
INNER JOIN 
(
    SELECT RAND() * (MAX(number) - MIN(number)) + MIN(number) AS number 
    FROM SomeTable 
) AS r2 
ON r1.number >= r2.number 
ORDER BY r1.number ASC 
LIMIT 1) 
LIMIT 5 

SQL小提琴的位置: -

http://sqlfiddle.com/#!2/14caa/4

这是获得10个随机行,然后使用进一步限制5只得到5行。当然,这可能不会得到5行(不太可能,但可能每个联合查询都会返回同一行)的可能性很小。