2013-09-20 2 views
1

Я пытаюсь написать лучшие коды отображения в моем проектеКак сопоставить значение в php?

У меня есть несколько 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) 

затем сопоставить ключ и получить значение.

Я не уверен, есть ли лучшие способы сделать это. Может ли кто-нибудь помочь?

Спасибо!

+1

Определите «лучше» в «лучших способах». – raina77ow

+1

номера в проекте b напрямую коррелируют с индексом буквы в проекте a? –

+0

Продолжайте использовать ассоциативные массивы. Происхождение его использования того, что вы назвали отображением. Предположим, что переключатель с Task5, он должен сделать 5 условных проверок перед получением значения, в то время как ассоциативный массив будет нести его адрес памяти непосредственно. – SaidbakR

ответ

0

вы можете играть с строковыми функциями

идеи является получить последний символ из вашего projectB:

, если у вас есть «task1», последний символ «1» , то вы можете создать новый char'A»КУС код„1“+ 16 после этого вы можете заменить старую строку или сделать новую строку„Таска“

немного ленивый ничего не найти точные функции, необходимые лол

0

As упомянутый B Enny, но вот код:

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

Где $ вар либо task1, task2 и т.д. и т.п.

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

Создайте массив отображения так же, как вы сказали. Это не похоже на то, что производительность критически важна, поэтому совершенно не нужно уходить с пути, чтобы создать что-то «умное».

Используйте понятное и понятное решение, потому что не только будет легче отлаживать, когда что-то пойдет не так, но в один прекрасный день вам (или кому-то еще) понадобится вернуться и понять ваш код , и это будет намного проще без ненужных умных бит.

Смежные вопросы