【问题标题】:PHP switch case with value from array具有来自数组的值的 PHP 切换案例
【发布时间】:2019-11-23 14:35:11
【问题描述】:

刚开始使用php,对于菜鸟问题​​,抱歉。数组中的值都是货币的 3 个字母的字符串,我想输出货币的“名称”:

$c_title = $currency['title'];      
    foreach($c_title as $c_switch) {    
         switch($c_switch) {            
            case "AUD":             
                echo 'Australian Dollar';       
                break;              
            case "USD":                 
                echo 'US Dollar';       
                break;              
            case 'GBP':                 
                echo 'Pound Sterling';      
                break;                  
            case 'EUR':                 
                echo 'Euro';            
                break;              
            default:                
                echo $currency['title'];    
        }   
   }    
} 

【问题讨论】:

  • 您的问题是什么?我推荐一个查找数组,而不是 switch。
  • 它不起作用,我不知道为什么
  • var_dump($c_switch); 我想$c_title 是必需的字符串。
  • 如果可能请提供输入数组和预期输出。

标签: php arrays switch-statement


【解决方案1】:

foreach($c_title as $c_switch) { 表示$c_title(又名$currency['title'];)是一个可迭代变量(例如一个数组)。

然后在default: 的情况下,您编写echo $currency['title'];,这仅在数据类型为标量/不可迭代(例如字符串)时才有效。

我们不知道您使用的是什么数据类型,但我们可以确定这是您必须克服的一个问题。我怀疑您只需要删除 foreach 循环并处理 scalar 值。

除此之外,我更愿意避免使用 switch 块,因为随着案例数量的增加,代码的长度会迅速膨胀。

我经常推荐使用查找数组。这个数组可能是一个变量,但因为数据几乎总是静态的,所以我想向开发人员展示如何声明一个常量。

一旦构造了查找,您只需要在提供翻译之前检查输入值是否表示为查找数组中的键。为了简洁地执行这个检查,我更喜欢null coalescing operator (??)。

代码:(Demo)

define("CURRENCY_LOOKUP", [
    'AUD' => 'Australian Dollar',
    'USD' => 'US Dollar',
    'GBP' => 'Pound Sterling',
    'EUR' => 'Euro',
]);

$currency['title'] = 'JPY';
echo CURRENCY_LOOKUP[$currency['title']] ?? $currency['title'];

echo "\n---\n";

$currency['title'] = 'GBP';
echo CURRENCY_LOOKUP[$currency['title']] ?? $currency['title'];

输出:

JPY
---
Pound Sterling

将翻译数据与翻译处理分开将使您的代码在项目的未来看起来干净、可读、高效、可扩展和专业。每当您希望添加更多货币换算时,您只需要在查找中添加新的关联元素——您永远不需要接触处理线。换句话说,你添加了一行代码而不是三行。


使用 PHP8,match() 成为switch() 和查找技术的优雅混合体。

代码:(Demo)

$currency['title'] = 'GBP';

echo match($currency['title']) {
    'AUD' => 'Australian Dollar',
    'USD' => 'US Dollar',
    'GBP' => 'Pound Sterling',
    'EUR' => 'Euro',
    default => $currency['title']
};
// Pound Sterling

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多