Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用关联数组作为转换器_Php_Arrays_Associative Array - Fatal编程技术网

Php 使用关联数组作为转换器

Php 使用关联数组作为转换器,php,arrays,associative-array,Php,Arrays,Associative Array,我一直在想,使用关联数组作为转换器是否有效(在资源和速度方面) 例如,假设我们有一个计算器类,它接收一个操作对象,然后调用一个函数来执行,run()。为了检查用户试图使用的操作,我们可以执行if()或switch()然后设置正确的操作,或者执行类似new$operations[$operation]的操作其中$operation表示类似+或-的字符串,这些键的$operations数组值(相应地)是加法和减法。通过这样做,我们可以实例化所需的操作,而无需编写长的switch()或if()语句 代

我一直在想,使用关联数组作为转换器是否有效(在资源和速度方面)

例如,假设我们有一个计算器类,它接收一个操作对象,然后调用一个函数来执行,
run()
。为了检查用户试图使用的操作,我们可以执行
if()
switch()
然后设置正确的操作,或者执行类似
new$operations[$operation]的操作
其中
$operation
表示类似
+
-
的字符串,这些键的
$operations
数组值(相应地)是
加法
减法
。通过这样做,我们可以实例化所需的操作,而无需编写长的
switch()
if()
语句

代码演示:

计算器.php Operation.php Addition.php 减法 现在,当我们使用这些类时:

$calculator = new Calculator();

// input from user
$operation = "+";


$calculator->setOperands(1,2,3);

/**
 * One way to set the operation
 */

// set the operation
switch($operation) {

    case '+':
        $calculator->setOperation(new Addition);
        break;
    case '-':
        $calculator->setOpration(new Subtraction());
        break;
    // and so on..

}

$calculator->calculate();

/**
 * Second way to set the operation
 */

$operations = ['+' => 'Addition', '-' => 'Subtraction']; // can add more

$calculator->setOperation(new $operations[$operation]);

$calculator->calculate();

第二种设置操作的方法是否有效(在资源和速度方面)?

让我们假设我有一个数组

$acronyms = ['AFAIK' => 'As far as I know', 'MVP' => 'Most valuable player'];
以及要转换的字符串

$string = "AFAIK I do the MVP";
现在我来做这个

echo strtr($string,$acronyms);
现在我的输出将是

As far as I know I do the Most valuable player

好的,你面临的问题是什么?如果你考虑了较低的上限,那么你的解释有点混乱。以计算器为例开始,以首字母缩略词的翻译结束。“他们是怎么联系的?”事后诸葛亮很抱歉。我并没有真正面对真正的代码问题。我试图弄清楚使用关联数组而不是大的
if()
switch()
语句是否有效。你可以离开首字母缩写部分,只关注计算器。@kfirba我想我肯定)。AFAIK
switch
操作符的速度并不比数组元素访问慢多少。无论如何,差别很小。所以在这种情况下,你不应该担心速度,谢谢你,但这不是我真正的意思。我在问,使用关联数组进行转换而不是
switch()
if()
语句是否有效
$acronyms = ['AFAIK' => 'As far as I know', 'MVP' => 'Most valuable player'];
$string = "AFAIK I do the MVP";
echo strtr($string,$acronyms);
As far as I know I do the Most valuable player