【问题标题】:How do I map the value in php?如何在 php 中映射值?
【发布时间】:2013-09-26 09:50:48
【问题描述】:

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

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

类似

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

我从我的数据库中得到的值是 task1task5 但我想在 taskAtaskE 中显示它们

我对映射的想法很少

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

或创建一个数组

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

然后匹配键并获取值。

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

谢谢!

【问题讨论】:

  • 以“更好的方式”定义“更好”。
  • 项目b中的数字是否与项目a中字母的索引直接相关?
  • 继续使用关联数组。它的使用来源就是你所说的映射。假设用Task5切换,在获取值之前应该进行5次条件检查,而关联数组会直接携带值的内存地址。

标签: php mapping


【解决方案1】:

你可以玩字符串函数

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

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

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

【讨论】:

    【解决方案2】:

    正如 Benny 所说,但这里是代码:

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

    其中 $var 是 task1、task2 等。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-06
          • 2019-04-15
          • 1970-01-01
          • 2020-07-22
          • 2019-02-15
          • 2020-10-06
          • 2016-02-04
          • 1970-01-01
          相关资源
          最近更新 更多