Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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_Mapping - Fatal编程技术网

如何在php中映射值?

如何在php中映射值?,php,mapping,Php,Mapping,我正在努力编写项目中最好的映射代码 我有一些1对1映射电子表格 差不多 projectA projectB taskA task1 taskB task2 taskC task3 taskD task4 taskE task5 我从数据库获得的值是task1到task5,但我想在taskA到taskE中显示它们 我对制图没有

我正在努力编写项目中最好的映射代码

我有一些1对1映射电子表格

差不多

projectA            projectB
taskA                task1
taskB                task2
taskC                task3
taskD                task4
taskE                task5
我从数据库获得的值是
task1
task5
,但我想在
taskA
taskE
中显示它们

我对制图没有什么想法

switch($var){
  case 'task1':
     return 'taskA'
  break;
  case 'task2':
     return 'taskB'
  break;
  ….more
}
或者创建一个数组

$map = array('task1 => taskA, 'task2' => 'taskB…more)
然后匹配键并获得值

我不确定是否有更好的方法来做到这一点。有人能帮忙吗


谢谢

您可以使用字符串函数

想法是从项目中获取最后一个字符B:

如果有“task1”,则最后一个字符是“1” 然后您可以通过ASC代码“1”+16创建一个新字符“a” 之后,您可以替换旧字符串或将新字符串设置为“taskA”


有点懒惰的人没有找到Benny提到的lol所需的确切函数,但下面是代码:

return chr(intval(substr($var, 4, 1)) + 64);

其中$var是task1、task2等。

以下是如何从功能上生成此数据:

<?php
function convertTaskNumberToLetter($task) {
    // get digits at the end of a string
    $digits = ereg_replace('^[^[:digit:]]*([[:digit:]]+)$', '\\1', $task);

    $numArr = str_split($digits);

    $result = '';

    foreach ($numArr as $digit) {
        $result .= chr($digit + 64);
    }

    // return the updated string
    return str_replace($digits, $result, $task);
}

$taskList = array('task1', 'task2', 'task3', 'task4', 'task 5', 'task99', 'task999');

$updatedTaskList = array_map('convertTaskNumberToLetter', $taskList);

print_r($updatedTaskList);
?>

像你说的那样创建一个映射数组。这听起来不像是性能至关重要的事情,所以完全没有必要特意去创造一些“聪明”的东西


使用一个清晰易懂的解决方案,因为当出现问题时,不仅调试更容易,而且总有一天你(或其他人)需要回来理解你的代码,如果没有不必要的聪明的比特,这将非常容易。

用“更好的方式”定义“更好”。项目b中的数字是否与项目a中字母的索引直接相关?继续使用关联数组。它的用法来源于您所谓的映射。假设使用Task5的开关,它应该在获取值之前进行5次条件检查,而关联数组将直接携带值的内存地址。
Array
(
    [0] => taskA
    [1] => taskB
    [2] => taskC
    [3] => taskD
    [4] => task E
    [5] => taskII
    [6] => taskIII
)