php - two - mysql select random rows limit
Selección ponderada aleatoria de un evento (2)
Dos formas de hacer esto, que puedo pensar desde lo más alto de mi cabeza:
Opción 1: Llene una nueva matriz con los valores clave del conjunto de datos, donde el peso determina la frecuencia con la que se repite un elemento. La proporción en este conjunto coincide entonces con la distribución ponderada. Simplemente tome usando $arr[array_rand($arr)]
. Aunque simple y fácil de entender, esto explotará en tu cara si hay MUCHOS artículos, o si los valores de peso son realmente altos.
$weighted = array();
foreach($items as $item) {
array_merge($weighted, array_fill(0, $item[''weight''], $item[''value'']);
}
$result = $weighted[array_rand($weighted)];
Opción 2. Suma los pesos. Elija un número aleatorio entre 0 y la suma de pesos. Haz un bucle sobre los elementos en el conjunto de datos, compáralo con el número aleatorio que elegiste. Tan pronto como llegue a uno que sea igual o mayor que el índice aleatorio, seleccione ese elemento.
function findRandomWeighted(array $input) {
$weight = 0;
// I''m assuming you can get the weight from MySQL as well, so this loop really should not be required. In that case $weight becomes a parameter.
foreach($items as $item) {
$weight += $item[''weight''];
}
$index = rand(1, $weight);
foreach($items as $item) {
$index -= $item[''weight''];
if($index <= 0) { return $item[''value''] }
}
return null;
}
Después de nuestra conversación en los comentarios a continuación, aquí hay un Pastebin con el código:
Posible duplicado:
¿Generar resultados aleatorios por peso en PHP?
He creado una base de datos en la que almaceno el nombre y el enlace de rss feeds.i he hecho el lector rss y todo está bien hasta ahora. Quiero crear un scroller de noticias que muestre los artículos de los feeds. Pero quiero dar a los feeds algunos valores de peso para que cada feed sea seleccionado según su importancia para mí y automáticamente cuando se selecciona un feed de aquellos en la base de datos, sus artículos solo se mostrarán en el scroller. Cualquier idea de cómo puedo hacerlo eso? gracias de antemano ..
ps mi problema es ¿cómo puedo hacer aytomatically la elección ponderada al azar de los feeds de la base de datos y no cómo mostrar los artículos de los feeds (he hecho esta parte).
Puede encontrar un algoritmo rápido implementado y descrito - ponderado aleatorio (en javascript pero puede reescribirse en PHP en unos minutos, creo). Es mucho más rápido que el bucle a través de la matriz.