«если» внутри цикла PHP - PullRequest
       8

«если» внутри цикла PHP

0 голосов
/ 07 ноября 2019

Я пытаюсь сделать этот код $vat1 - $vat10$ короче, зациклив строку:

$vat1 = htmlspecialchars($_POST["vat1"]);
if ($vat1 != "zw" &&  $vat1 != "") {
    $vat1 .= "%";
}
$vat2 = htmlspecialchars($_POST["vat2"]);
if ($vat2 != "zw" &&  $vat2 != "") {
   $vat2 .= "%";
}
....

Но он работает неправильно из-за оператора if внутри него:

for ($x; $x <=10; $x++){
    $vat = 'vat' . $x;
    $$vat = htmlspecialchars($_POST["vat" . $x]);
    if ($$vat != "zw" &&  $$vat != "") {
        $$vat .= "%";
    }
}

IЯ читал, чтобы использовать троичный оператор внутри цикла, поэтому я пытаюсь сделать что-то вроде этого:

for ($x; $x <=10; $x++){
    $vat = 'vat' . $x;
    $$vat = htmlspecialchars($_POST["vat" . $x]) . 
                            ($$vat != "zw" &&  $$vat != "") ? $$vat .= "%" : "";
}

Но все же это не дает хорошего эффекта. Можете ли вы сказать мне, как сделать это правильно?

1 Ответ

0 голосов
/ 07 ноября 2019

Вместо использования переменных переменных, вы можете использовать ${'vat.$x} конструкцию

$_POST = ['vat1' => 1, 'vat2' => 'zw', 'vat3' => '', 'vat4' => 4, 'vat5' => 5,
          'vat6' => 6, 'vat7' => 7, 'vat8' => 8, 'vat9' => 9, 'vat10' => 10
        ];

for ($x=1; $x <=10; $x++) {
//   ^^^^    Note I started the loop at a specific place 1 in this case
    ${'vat'.$x} = htmlspecialchars($_POST['vat'.$x]);
    if (${'vat'.$x} != "zw" &&  ${'vat'.$x} != "") {
        ${'vat'.$x} .= "%";
    }
}

echo 'vat1 = ' . $vat1.PHP_EOL;
echo 'vat2 = ' . $vat2.PHP_EOL;
echo 'vat3 = ' . $vat3.PHP_EOL;
echo 'vat4 = ' . $vat4.PHP_EOL;
echo 'vat5 = ' . $vat5.PHP_EOL;
echo 'vat6 = ' . $vat6.PHP_EOL;
echo 'vat7 = ' . $vat7.PHP_EOL;
echo 'vat8 = ' . $vat8.PHP_EOL;
echo 'vat9 = ' . $vat9.PHP_EOL;
echo 'vat10 = ' . $vat10.PHP_EOL;

РЕЗУЛЬТАТЫ

vat1 = 1%
vat2 = zw
vat3 = 
vat4 = 4%
vat5 = 5%
vat6 = 6%
vat7 = 7%
vat8 = 8%
vat9 = 9%
vat10 = 10%

Или вы можете придерживаться решения переменной переменной

for ($x=1; $x <=10; $x++) {
//   ^^^^    Again start the loop at a specific place 1 in this case

    $t = 'vat'.$x;
    $$t = htmlspecialchars($_POST['vat'.$x]);
    if ($$t != "zw" &&  $$t != "") {
        $$t .= "%";
    }
}

Будет также выдавать

vat1 = 1%
vat2 = zw
vat3 = 
vat4 = 4%
vat5 = 5%
vat6 = 6%
vat7 = 7%
vat8 = 8%
vat9 = 9%
vat10 = 10%

Так что в основном все, что не так с вашим кодом, было то, что вы неправильно запустили цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...