【问题标题】:Turning if and Else Statement into something I can echo?将 if 和 Else 语句变成我可以呼应的东西?
【发布时间】:2013-11-21 12:20:37
【问题描述】:

基本上,下面是我目前拥有和工作的 php,并且“转换”完美,但我确实想把它放在一个已经工作的字符串中。

    $level0 = 0;
    $level1 = 24999;
    $level2 = 49999;
    $level3 = 74999;
    $level4 = 99999;
    $level5 = 124999;

    if ($myallcreadits < $level0) { 
        echo('LEVEL0'); }
    if ($myallcreadits < $level1) { 
        echo('LEVEL1'); }
    if ($myallcreadits < $level2) { 
        echo('LEVEL2'); }
    if ($myallcreadits < $level3) { 
        echo('LEVEL3'); }
    if ($myallcreadits < $level4) { 
        echo('LEVEL4'); }
    if ($myallcreadits < $level5) { 
        echo('LEVEL5'); }

即我的示例是在页面下方实现以下示例:

$details='<div id="level">'.$level.'</div>'

而且我希望它回显当前级别,这取决于它是否低于或等于不同位置,因为我不想回显当前级别。

【问题讨论】:

    标签: php if-statement echo


    【解决方案1】:

    这样做

    <?php
    
    $level0 = 0;
    $level1 = 24999;
    $level2 = 49999;
    $level3 = 74999;
    $level4 = 99999;
    $level5 = 124999;
    
    $myallcreadits = 24543;
    
    
    if ($myallcreadits < $level0) {
        $level='LEVEL0'; }
    elseif ($myallcreadits < $level1) {
        $level='LEVEL1'; }
    elseif ($myallcreadits < $level2) {
        $level='LEVEL2'; }
    elseif ($myallcreadits < $level3) {
        $level='LEVEL3'; }
    elseif ($myallcreadits < $level4) {
        $level='LEVEL4'; }
    elseif ($myallcreadits < $level5) {
        $level='LEVEL5'; }
    
    echo $details='<div id="level">'.$level.'</div>'; //Prints LEVEL1
    

    【讨论】:

    • 我怀疑。它与 OP 的逻辑有相同的错误:对于 $myallcreadits 的小值,它总是会导致 LECEL5
    • @AlmaDo,这是正确的。 elseif 应该可以解决问题吧?
    • 是的,它会修复的。但这很奇怪
    • 这将解决问题,但我认为这应该是一个函数。无论如何 +1。
    【解决方案2】:

    真的,为什么要这样做?你的逻辑有错误:你会用新的值覆盖你的旧值,因为如果$myallcreadits &lt; 49999 那么它显然也是&lt; 124999。另外,使用数组 - 如果你有 50 个级别怎么办?

    $levels = [
      'LEVEL0'=>0, 
      'LEVEL1'=>24999, 
      'LEVEL2'=>49999, 
      'LEVEL3'=>74999, 
      'LEVEL4'=>99999, 
      'LEVEL5'=>124999
    ];
    //$myallcreadits=50000;
    $filter = array_filter($levels, function($x) use ($myallcreadits)
    {
       return $x<$myallcreadits;
    });
    end($filter);
    $result = key($filter);
    $details='<div id="$result">'.$result.'</div>';
    

    更新

    如果您希望您的级别具有 25000 步(显然是负 1),请使用:

    $values = array_map(function($x)
    {
       return $x-1;
    }, range(0, 125000, 25000));
    $values[0] = 0;
    $keys   = array_map(function($x)
    {
       return 'LEVEL'.$x;
    }, range(0, count($values)-1));
    $levels = array_combine($keys, $values); 
    

    【讨论】:

    • 那么有没有办法让它每上升 25,000 个,它就会上升一个级别?
    • ?我猜最大值是 125k?
    • @user1077369 这是一个示例。您可以使用它并定义自己的限制
    【解决方案3】:

    最好使用一些动态级别值。

    $levels = array(1 => 0, 24999, 49999, 74999, 99999, 124999);
    
    $myallcreadits = 60000;
    $current_level = 0;
    foreach($levels as $index => $level)
      {
      if ($myallcreadits > $level)
        $current_level = $index;
      }
    
    echo $current_level;
    

    【讨论】:

    • 这个行得通,但是关卡有点乱,现在吐60000的关卡是2。什么时候应该是3。
    • 太棒了!我确实尝试了一个数组,但不能很好地掌握它!但我确实有点理解,因为我大约在你做的时候做到了这一点!非常感谢!
    【解决方案4】:

    所以你似乎想要实现的是将你的学分分成多个级别。

    $level = ceil( ($credits + 1) / 25000);
    
    if ($level < 0) $level = 0;
    if ($level > 5) $level = 5;
    
    $leveltext = 'LEVEL' + $level;
    
    echo $leveltext;
    

    但是,我认为您应该尝试运行您的代码,因为它会打印出:LEVEL1LEVEL2LEVEL3LEVEL4LEVEL5

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 2020-08-20
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2014-11-11
      相关资源
      最近更新 更多