Масштабирование значений в PHP

Я не могу двигаться о том, как выразить, это - PHP.

Я имею 100 и 420 как моя минута и макс. значение, которое я хочу получить.

Чем позволяет, предполагают, что я имею:

1000
4534
34566
123145
12312265

Теперь, как может я говорить:

Возьмите 4534 и зная, что 1000 = 420 и 12312265 = 100 определяют 4 534 значения.

Для создания этого более ясным я пытаюсь представить разряды веб-страницы с квадратами, поэтому если разряд равняется 1, это должно быть переведено в мое максимальное значение / размер 420, однако если страница занимает место низко на популярности, скажите, что 13 000 затем ее размеров должны быть близко к минимальным 100. Я знаю все значения.

Спасибо.

Я все еще испытываю затруднения при понимании этого.

До сих пор с помощью кода из первого ответа я имею:

$srcmin=1185;
$srcmax=25791525;

$destmin=100;
$destmax=420;

$pos = (($RANK - $srcmin) / ($srcmax-$srcmin)) ;
$rescaled = ($pos * ($destmax-$destmin)) + $destmin;*/

$percentage = (($RANK - $MIN) * 100) / $MAX;
$SIZE = (($percentage / 320) * 100) + 100

Будучи $RANK мои значения для разрядов веб-страниц и $SIZE значение, что я должен измерить их соответственно. Это не работает (моя ошибка несомненно) все, что я получаю от $SIZE, 100.

7
задан Marvin 28 June 2010 в 23:44
поделиться

4 ответа

Это должно проиллюстрировать....

$values=array(1000, 4534, 34566, 123145, 12312265);
$srcmin=$values[0];
$srcmax=$values[count($values)-1];

$destmin=420;
$destmax=100;

foreach($values as $x)
{
     //how far in the source range is $x (0..1)
     $pos = (($x - $srcmin) / ($srcmax-$srcmin)) 

     //figure out where that puts us in the destination range
     $rescaled = ($pos * ($destmax-$destmin)) + $destmin;
}

Вы хотите знать, как далеко в исходном диапазоне находится каждое число, вот что дает вам значение $pos. Учитывая это, вы можете перевести его в то, насколько далеко в диапазоне назначения вы находитесь.

6
ответ дан 7 December 2019 в 05:17
поделиться

Что вам нужно сделать, это

(1) найти [0..1] позицию каждого значения в диапазоне значений, 1000 означает x = 0 и 123145 означает x = 1 ;

(2) инвертируйте его, потому что вы хотите, чтобы наименьшее число имело наибольшую ширину (x = 1-x)

(3) преобразуйте это число [0..1] в желаемый диапазон ширины.

$values = array(1000, 4534, 34566, 123145);
$minV = min($values);
$maxV = max($values);
$minW = 100;
$maxW = 420;
foreach($values as $v)
{
    $width = $minW + ($maxW - $minW) * (1 - (($v - $minV) / ($maxV - $minV)));
    echo "<div style='width:".$width."px;background-color:red;padding:5px;'></div>";
}

или вы можете обобщить его в функции:

function invTranslate($value)
{
    $min1 = 1000;
    $max1 = 123145;
    $min2 = 100;
    $max2 = 420;
    return $min2 + ($max2 - $min2) * (1 - (($value - $min1) / ($max1 - $min1)));
}

и использовать как:

<div style="width:<?=invTranslate(5000)?>px"></div>
<div style="width:<?=invTranslate(100000)?>px"></div>
<div style="width:<?=invTranslate(90000)?>px"></div>
1
ответ дан 7 December 2019 в 05:17
поделиться

Сначала определите минимальное и максимальное значения имеющихся у вас данных. Тогда ваш вопрос эквивалентен этому -

Мы назовем MIN вашим целевым минимумом, а MAX - вашим целевым максимумом. Мы назовем val_min минимумом из ваших значений и val_max максимумом из ваших значений.

Затем вам нужно найти оба диапазона - RANGE = MAX-MIN , val_range = val_max - val_min

Теперь вы можете начать преобразование.

Сначала превратите ваше подлежащее преобразованию значение в число от 0 до 1, при этом val_min сопоставлено с 0 и val_max сопоставлено с 1:

normed_value = (value - val_min) / val_range

Затем сопоставьте это значение от 0 до 1 с вашим окончательным диапазоном:

final_scaled_value = MIN + (normed_value * RANGE)
0
ответ дан 7 December 2019 в 05:17
поделиться

Я думаю, вы имеете в виду

$min=100;
$max=420;
$range = $max - $min;
$nums = [10,15,20,25,30]; // Edit this as you please
$relMin = min($nums);
$relMax = max($nums);
$relRange = $relMax - $relMin;
foreach($nums as $num)
{
  $pct = ($num - $relMin)/$relRange;
  echo "$num is %$pct between $relMin and $relMax";
  $val = $pct*$range + $min;
  echo "$pct of the range between $min and $max is $val";
}
1
ответ дан 7 December 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: