1

我正在尝试在我的项目中编写最好的映射代码

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

就像是

projectA            projectB
taskA                task1
taskB                task2
taskC                task3
taskD                task4
taskE                task5

我从我的数据库中获得的价值是task1totask5但我想将它们显示在taskAtotaskE

我对映射的想法很少

switch($var){
  case 'task1':
     return 'taskA'
  break;
  case 'task2':
     return 'taskB'
  break;
  ….more
}

或创建一个数组

$map = array('task1 => taskA, 'task2' => 'taskB…more)

然后匹配键并获取值。

我不确定是否有更好的方法来做到这一点。任何人都可以帮忙吗?

谢谢!

4

4 回答 4

0

你可以玩字符串函数

想法是从你的 projectB 中获取最后一个字符:

如果你有'task1',最后一个字符是'1',那么你可以通过'1' + 16的ASC代码创建一个新的char'A',然后你可以替换旧字符串或制作新字符串'taskA'

有点懒没有找到你需要的确切功能lol

于 2013-09-20T21:56:12.017 回答
0

正如本尼所提到的,但这里是代码:

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

其中 $var 是 task1、task2 等。

于 2013-09-20T22:04:57.113 回答
0

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

<?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);
?>

结果:

Array
(
    [0] => taskA
    [1] => taskB
    [2] => taskC
    [3] => taskD
    [4] => task E
    [5] => taskII
    [6] => taskIII
)
于 2013-09-20T22:31:19.560 回答
0

就像你说的那样创建一个映射数组。这听起来不像是性能很关键的东西,所以绝对没有必要竭尽全力创造一些“聪明”的东西。

使用一个清晰​​易懂的解决方案,因为当出现问题时不仅调试起来更容易,而且有一天你(或其他人)需要回来并理解你的代码,那如果没有不必要的聪明位,会容易得多。

于 2013-09-20T22:31:25.577 回答