PHP:在“echo”中执行数学运算。同时将变量名传递给函数。

3

我正在构建一个表格(虽然不使用<table>),并从mysql中填充数据。我有以下代码来构建“表格”:

$NYC = // data from mysql, working fine
$NYC_min = 300;
switch($cou_mun){
    case "New York":
        $NYC++;
        break;
    //etc
}

function cityMinMet($city){
    $city_min= "$city" . "_min";
    if($city>$city_min){return "yes";}
    else{return "no";};
}

echo "<h3>Table 6: Recruitment by target area</h3>";
echo "<ul>\n<li><span>Target Area</span><span>Number Recruited</span><span>Amount under minimum</span><span>Minimum</span><span>Minimum met?</span></li>";
echo "<li><span>12 Jurisdictions with Highest AIDS Prevalance</span><span></span><span></span><span></span><span></span></li>";
echo "<li><span>New York</span><span>$NYC</span><span>" . $NYC_min-$NYC . "</span><span>$NYC_min</span><span>"; cityMinMet('$NYC'); echo "</span></li>";

我遇到了一个问题:" . $NYC_min-$NYC . ":它破坏了行的结构(该行在" . $NYC_min-$NYC . "之前被解释为结束)。但是,如果我有<span>$NYC_min-$NYC</span>(而不是作为echo的附加组件),则单元格的值将打印为300-500而不是200

此外,我不确定我是否正确设置了我的函数(但这不会破坏表/行)。从cityMinMet('$NYC')中,我想要发送字面字符串$NYC(而不是它的值)到函数。在函数内部,我需要将_min附加到$NYC,然后调用$NYC_min并返回其值。

编辑:我改变了方程式中$NYC$NYC_min的顺序。


2
你调用函数的方式(使用单引号)传递字面字符串。此外,如果你需要在函数cityMinMet中使用$NYC_min的值,那么只需将该值传递给函数即可。不要让你的代码跳过变量/全局变量的限制。 - webbiedave
使用<table>来呈现表格数据是完全合法的。 - Herbert
@webbiedave:哦,太棒了,谢谢!除了这种方式,我还有什么其他方法可以将$NYC_min的值传递给函数? - Jakob Jingleheimer
@Herbert:我想要给表格添加样式,但是<table>标签几乎不接受 CSS :( - Jakob Jingleheimer
@jacob:啊!我明白了。有些人读了一些关于不应该使用<table>进行布局的文章,就会认为这意味着“永远不应该在任何情况下使用<table>”。只是想指出,在它被设计出来时使用它还是可以的(如果你不知道的话)。 :) - Herbert
5个回答

12

用括号将其包起来:

" . ($NYC - $NYC_min) . "

你也可以在echo语句中使用逗号:", $NYC - $NYC_min, " - Herbert

2

对于 " . $NYC-$NYC_min . ",更改为 " . ($NYC-$NYC_min) . "

要传递字面字符串$NYC,请使用"\$NYC"。请注意,在此处需要使用双引号"而不是单引号',否则它将传递字符串文字\$NYC

正如@webbiedave在他的评论中指出的那样,将其作为'$NYC'传递应该已经发送了字符串文字$NYC


2

你的第一个问题是:$NYC - $NYC_min被解释为字符串(被微妙地强制转换为字符串),因为你正在将它与字符串连接起来。你应该在输出之前进行数学计算,并将其存储在变量中,然后再输出(更清晰),或者你可以将其放在括号中,这样在php解析器考虑字符串连接上下文之前就会被解释。


1
从cityMinMet('$NYC')中,我想要将字面字符串$NYC(而不是它的值)发送到函数。
以单引号调用函数的方式将传递字面字符串。
但是,如果您需要在函数cityMinMet中使用$NYC_min的值,则只需将该值传递给函数即可:
function cityMinMet($city, $city_min)
{
    if ($city > $city_min) {
        return "yes";
    } else {
        return "no";
    }
}

在你的调用代码中:

echo cityMinMet($NYC, $NYC_min);

或者您可以完全放弃该函数,而只需执行以下操作:

echo ($city > $city_min) ? 'yes' : 'no';

啊,明白了。最后一个也很酷!你知道哪个更有效率吗?(我将至少运行21个这样的程序)。 - Jakob Jingleheimer
1
如果你需要多次执行这个操作,那么一定要使用函数。这样,如果你需要将 'yes' 改为 'Y',你只需要在一个地方修改即可。 - webbiedave
顺便说一下,我最终将所有内容压缩到了一个for循环中,并在其中调用函数 ;) - Jakob Jingleheimer

0
可能最简单的方法是创建一个快速函数来完成你需要做的事情:
function calculate($nyc, $nyc_min) {
  return $nyc - $nyc_min;
}

然后用以下内容替换您所拥有的:

echo "<li><span>New York</span><span>$NYC</span><span>" . calculate($NYC,$NYC_min) . "</span>...";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接