Hola El-FeNiX!
Claro... debes usar un rango más amplio en rand(), por ejemplo rand(0,1000);
Ya tienes muchas más posibilidades.
Otra cosa... no veo muy óptimo lo que haces en el segundo while, recorres uno por uno los elementos del primer array para ver si hay aguna coincidencia.
Además ten en cuenta que en el primer array puede haber valores duplicados,
tampoco estas controlando eso.
Debemos buscar alguna manera para evitar ese trabajo para PHP y que sea más eficiente el código, por ejemplo:
Código PHP:
// Preparemos las matrices.
$array_numeros = array ();
$array_numeros_comp = array();
// Generemos el primer array
for( $i = 1; $i <= 20; $i++){
do
{
$j = rand (1, 1000);
}
while(in_array($j,$array_numeros))
$array_numeros[$i] = $j;
echo " $j "; // estamos incluyendo el espacio antes y después
}
Fíjate que he utilizado la estructura do {...}while() que te garantiza que el
bucle va a ser recorrido al menos una vez y se seguirá repitiendo miesntras la condición dentro de while() sea correcta.
Lo que le dije a la estructura anterior en español es:
Genera un numero aleatorio, pero... si ese numero ya existe dentro del array $array_numeros, entonces volve a generarlo hasta que el nuevo numero $j no exista en el array.
Ahora vamos al segundo array, que, con el código que ya te mostré te puede imaginar de cómo va a ser:
Código PHP:
// Generemos el segundo array
for( $i = 1; $i <= 20; $i++){
do
{
$j = rand (1, 1000);
}
while(in_array($j,$array_numeros) || in_array($j,$array_numeros_comp))
$array_numeros_comp[$i] = $j;
echo " $j ";
}
Fíjate que ene ste caso en la condición dentro del while agregue que
si $j existe en el primer array o si $j existe en el segundo, que lo vuelva a generar.
Como consecuencia (y con este simple código ejemplificativo) tendrás dos arrays con 20 elementos cada uno y no repetitivos, ni entre los array ni entre ellos mismos.
Bueno amigo, espero haberte sido de ayuda parea optimizar tus códigos y para que sigamos aprendiendo juntos en esta gran comunidad.
Saludos