php 循环遍历数组中的每个值,然后对值使用switch语句[duplicate]

ycl3bljg  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(107)

此问题在此处已有答案

Implementing a simple lookup array(5个答案)
14小时前关闭
我是PHP新手,我想知道是否有人可以帮助我。
我有一个数组,数组中的值由另一个函数确定,但数组将始终是警告,关键或确定,数组也可以是任何长度。例如:
第一个月
如何使用switch函数和forloop函数,使其循环遍历数组中的每个值并打印出关联消息(无论它在数组中出现多少次,例如warning在数组中出现两次,因此it is a warning应该打印两次)。
我已经尝试了下面的代码,但它将永远打印出未知。

switch($hold){
  case 'ok':
  echo 'everyhting is ok';
  break;

  case 'warning':
  echo 'it is a warning';
  break;

  case 'critical':
  echo 'its critical';
  break;

  default:
  echo 'unknown';
};

字符串
谢谢。

f45qwnt8

f45qwnt81#

switch语句需要编写相当多的代码。为什么不使用另一个数组将消息与$hold中的状态相关联。像这样:

$hold = ['warning', 'warning', 'critical', 'ok', 'this is bad'];

$messages =  ['warning'  => 'it is a warning',
              'critical' => 'its critical', 
              'ok'       => 'everyhting is ok'];

foreach ($hold as $status) {
    echo ($messages[$status] ?? 'unknown') . PHP_EOL;
}

字符串
如您所见,我使用foreach () loop遍历$hold
我使用an associative array和特殊的Null合并运算符。如果你不喜欢这样,你可以使用switch语句。
有关演示,请参阅:https://3v4l.org/jNkfF

pw9qyyiw

pw9qyyiw2#

你可以在循环中执行switch,像这样:

foreach ($hold as $message) {
    switch ($message) {
        case 'ok':
            echo 'everyhting is ok';
        break;
        case 'warning':
            echo 'it is a warning';
        break;
        case 'critical':
            echo 'its critical';
        break;
        default:
            echo 'unknown';
    }
}

字符串
foreach似乎比经典的for更容易阅读,但如果你绝对需要它成为for,你可以这样写:

for ($index = 0; $index < count($hold); $index++) {
    switch ($hold[$index]) {
        // Same code as before
    }
}


试试这个代码here

相关问题