【问题标题】:PHP scale number up/down based on input?PHP根据输入向上/向下缩放数字?
【发布时间】:2020-12-31 02:16:04
【问题描述】:

使用字符串的长度,我想根据它来放大/缩小字体大小。

因此,字符串长度越短,数字越大。字符串长度越大,数字越小。

但我不想做几十个 if/else 或 switch 语句。理想情况下,我会根据输入以编程方式缩放输出。

类似...

  text_length = strlen($full_text)
  size_range = range(0, 5)
  
  // if text_length = 1 then 100% of size_range
  // if text_length = 280 then 0% of size_range

在这种情况下,最大文本长度为 280(它们是推文)。

【问题讨论】:

  • 你可以使用 javascript 或 jQuery 来获得相同甚至更好的 css 吗?
  • @JitendraYadav 已经尝试了很多使用 jQuery、纯 JS 和 CSS 的解决方案。都有自己的缺点,所以现在试试这个方法。
  • 我很欣赏这个链接,但不是我要找的。这些解决方案分为多行,我希望对事物进行更多控制。
  • okies,我会检查一下有什么可以帮助您的。

标签: php numbers


【解决方案1】:

如果y = 1/-279x + 280/279 的情节反映了你想要的。

我在 Ruby 中做了以下脚本,应该很容易翻译成 PHP:

require "bundler/inline"

gemfile do
  gem "rspec"
end

require "rspec/autorun"

MAX_SIZE_PERCENTAGE = 1.0

def size_it(text_length, maximum_length)
  alpha = - MAX_SIZE_PERCENTAGE / (maximum_length - MAX_SIZE_PERCENTAGE)
  beta = maximum_length / (maximum_length - MAX_SIZE_PERCENTAGE)
  ((alpha * text_length) + beta).round(2)
end

RSpec.describe "dynamic size calculation" do
  it "100% when minimal size" do
    text_length = 1
    maximum_size = 280
    expect(size_it(text_length, maximum_size)).to eq(1)
  end

  it "75% when almost too short" do
    text_length = 70
    maximum_size = 280
    expect(size_it(text_length, maximum_size)).to eq(0.75)
  end

  it "50% when half point" do
    text_length = 140
    maximum_size = 280
    expect(size_it(text_length, maximum_size)).to eq(0.5)
  end

  it "25% when almost too long" do
    text_length = 210
    maximum_size = 280
    expect(size_it(text_length, maximum_size)).to eq(0.25)
  end

  it "0% when maximum size" do
    text_length = 280
    maximum_size = 280
    expect(size_it(text_length, maximum_size)).to eq(0)
  end
end

数学很直观,几个地雷:

  • 整数除法,例如 1/280 导致 0 而不是 0.0003,我通过调用 .to_f 来阻止这种情况,Ruby 方式转换为浮点数。
  • 四舍五入错误,预期为 0.25 并得到 0.2503213,我通过调用 round(2) 进行了调整,Ruby 方法四舍五入到最接近的小数点。

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多