arrays — функция для присвоения строки переменной с помощью switch

Я должен сделать функцию для назначения строки переменной в соответствии со значением другой переменной, используя ООП. Я создал эту функцию (calclaIMC) внутри класса конструктора, и для этого я использовал массив ($ imc_arr). Я понимаю, что мой код, вероятно, выглядит громоздким и даже неуместным, но это уникальное упражнение, предназначенное для обучения конкретным вещам. Вот что я придумала до сих пор:

<?php
class CalculoIndice{
...
public $imc_arr = array(
'Magreza grave',
'Magreza moderada',
'Magreza leve',
'Saud&aacute;vel',
'Sobrepeso',
'Obesidade Grau I',
'Obesidade Grau II (severa)',
'Obesidade Grau III (m&oacute;rbida)');

function CalculoIndice(){
$this->preparaCalculo();
$this->calculaIMC();
}

function preparaCalculo(){
...
}

function calculaIMC(){
switch ($this->imc) {
case ($this->imc < 16):
$this->imc_cat = $this->imc_arr[0];
break;
case ($this->imc < 17):
$this->imc_cat = $this->imc_arr[1];
break;
case ($this->imc < 18.5):
$this->imc_cat = $this->imc_arr[2];
break;
case ($this->imc < 25):
$this->imc_cat = $this->imc_arr[3];
break;
case ($this->imc < 30):
$this->imc_cat = $this->imc_arr[4];
break;
case ($this->imc < 35):
$this->imc_cat = $this->imc_arr[5];
break;
case ($this->imc < 40):
$this->imc_cat = $this->imc_arr[6];
break;
default:
$this->imc_cat = $this->imc_arr[7];
}
}
}
?>

Это не работает. Я не мог понять, что происходит и в чем проблема, но она не отображает переменную (imc_cat), как я планировал. Я уверен, что это что-то простое, что мне не хватает, но я потратил несколько часов на поиски ответа безуспешно.
Я ценю любое понимание того, что может быть не так.

0

Решение

Вы не ставите условия внутри case выражения. case выполняет тест на равенство с выражением в switch() заявление, так

case ($this->imc < 16):

средства

if ($this->imc == ($this->imc < 16))

Вы должны использовать if/elseif вместо switch/case,

if ($this->imc < 16) {
$this->imc_cat = $this->imc_arr[0];
} elseif ($this->imc < 17) {
$this->imc_cat = $this->imc_arr[1];
} ...
} else {
$this->imc_cat = $this->imc_arr[7];
}

На самом деле, есть метод, который используют некоторые программисты (но я лично не одобряю):

switch(true) {
case ($this->imc < 16):
$this->imc_cat = $this->imc_arr[0];
break;
case ($this->imc < 17):
$this->imc_cat = $this->imc_arr[1];
break;
...
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]