PHP: выполнение математики внутри "эха".также передавая имя переменной в функцию - PullRequest
3 голосов
/ 15 сентября 2011

Я строю таблицу (но не использую <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> (не как дополнительный компонент эха), значение ячейки печатается как 300-500 вместо 200.

Также я не уверен, что правильно настроил свою функцию (но это не нарушает таблицу / строку). С cityMinMet('$NYC') Я хочу, чтобы буквенная строка $NYC (а не ее значение) отправлялась в функцию. Внутри функции мне нужно добавить _min к $NYC, а затем вызвать $NYC_min, и она вернется со своим значением.

РЕДАКТИРОВАТЬ : Я изменил порядок $NYC и $NYC_min в уравнении.

Ответы [ 5 ]

10 голосов
/ 15 сентября 2011

Оберните это в скобках:

" . ($NYC - $NYC_min) . "
2 голосов
/ 15 сентября 2011

Ваша первая проблема: $NYC - $NYC_min интерпретируется как строка (тонко приведенная как таковая), потому что вы соединяете ее со строкой.Вы должны выполнить математику перед эхо и сохранить ее в переменной, которую вы там записали (очистить), или вы можете поместить ее в скобки, чтобы она интерпретировалась до того, как парсер php рассмотрит контекст конкатенации строк.

2 голосов
/ 15 сентября 2011

Для " . $NYC-$NYC_min . " изменить на " . ($NYC-$NYC_min) . "

Для передачи буквенной строки $NYC используйте "\$NYC".Обратите внимание, что здесь вам нужно использовать двойные кавычки " вместо одинарных кавычек ', в противном случае он передаст строковый литерал \$NYC

Как указывает @webbiedave в своем комментарии, передавая его как '$NYC' уже должен отправлять строковый литерал $NYC

1 голос
/ 16 сентября 2011

Из cityMinMet ('$ NYC') я хочу буквальную строку $ NYC (а не ее значение) отправляется в функцию.

Способ, которым вы вызываете функцию (с одинарными кавычками), передаст буквенную строку.

Однако, если вам нужно значение $NYC_min в функции cityMinMet, просто передайте значение функции:

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';
0 голосов
/ 16 сентября 2011

Может быть проще сделать быструю функцию, чтобы сделать то, что вам нужно сделать:

function calculate($nyc, $nyc_min) {
  return $nyc - $nyc_min;
}

, а затем заменить то, что у вас есть:

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