psylosss

psylosss
Рейтинг
126
Регистрация
23.12.2005

Так в чем вопрос-то? К чему все это?

Вот на скорую руку набросал:


<?php

// Алгоритм
//Составляем "карту" распределения весов
//--------------------------------------| длина отрезка равна сумме коэффициентов
//---*-------*-*------------*-----------| расставляем на отрезке маркеры (*), отступая каждый раз от предыдущего на расстояние веса
//-a-*--b----*c*-----d------*---e-------| каждому диапазону между маркерами соответствует значение
//---*----@--*-*-----*------*-----------| бросаем на отрезок случайную точку и смотрим в какой диапазон она попала


$m=array('a' =>1, 'b'=>0.7, 'c'=>1.1, 'd'=>4);

$sum=array_sum($m); //Получаем сумму весов

$map=array(); //Это "отрезок"
$next_marker=0.0; //Это смещение следующего маркера
foreach ($m as $value=>$weight)
{
$range=array('from'=>$next_marker,'to'=>$next_marker+$weight);
$map[$value]=$range; //Ставим маркер по вычисленному смещению
$next_marker+=$weight;
}


$random_point=rand(0,$sum*1000)/1000; //Бросаем случайную "точку" на "отрезок", обеспечивая достаточную дискретность

//Смотрим в какой диапазон попала случайная точка
$result=null;
foreach ($map as $value=>$range)
{
if ($random_point>$range['from'] and $random_point<=$range['to'])
{
$result=$value;
break;
}

}

echo $result;


Хз, может велосипед изобрел. Может уже есть какая-то встроенная пхпшная функция, или все это проще делается. Но это решение почти рабочее. Надо только проверить граничные значения...

Верно :)

Какая лицензия ПО?

Чем отличается от битрикса?

И главное - кому в действительности это кроме вас самих может быть нужно?

Ни один хоть сколько-нибудь серьезный проект не будет использовать "это" в своей работе. Неизвестный, недокументированный, нетестированный продукт... Риски огромны. Напрасно выброшенный труд.

$text=preg_replace('@\d,\d@','\1.\2',$text);

Основной долг почти выплачен. До 07.12.2009 должен быть погашен основной долг и выплачена компенсация за задержку. Условия в первом сообщении в силе.

В случае исполнения своих обязательств по погашению основного долга и компенсации за задержку до 07.12.2009, топик закроется.

потер, потому что уже было.

Ocenok.net. Потому что smysla.net в таком домене. И babla тоже net на такую хренотень.

ХХороший ддомеен.

SeoNizator:
А я не понял . Можно пояснить?

switch выполняет выражение после case не в том случае, если значение, записанное в case ИСТИННО. А в том случае, если оно СОВПАДАЕТ с тем, что записано после switch.

В первом case в скобках записано ($a<100). Чему равно это выражение? Оно равно true. Во втором case выражение в скобках равно false. switch сравнивает Ноль ($a=0; switch ($a)) с true (в первом case) и с false (во втором случае). Какой case сработает?

Иначе говоря, первый case выполнится в случае, если $a == ($a<100), а второй case выполнится в том случае, если $a == ($a > 100). Поскольку $a=0, то выполняется второй case (0 == false).

Всего: 2171