Как создать динамический оператор переключения PHP из запроса MySQL - PullRequest
3 голосов
/ 14 июля 2011

Это для добавления изображений, категорий и комментариев из электронного письма в фотогалерею, над которой я работаю.

Я вытаскиваю первые два найденных имени категории из тела сообщения электронной почты и мне нужноприсвойте идентификатор категории переменной $ cat для вставки в БД.

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

Переключательзаявление, которое я хотел бы изменить:

Жестко закодировано:

foreach($foundKeywords as $key => $value) {  
            if($key<=1){

switch($value)
        {
            case 'family':
            $cat='3';
            break;
            case 'friends';
            $cat='4';
            break;
            case 'fun';
            $cat='6';
            break;
            case 'places';
            $cat='5';
            break;
            case 'general';
            $cat='2';
            break;
            case 'henry';
            $cat='7';
            break;
            default;
            $cat='2';
        }

Я хотел бы извлечь категории из таблицы MySQL и сделать это следующим образом:

$res = mysql_query('SELECT * FROM gallery_category');
            $cat_switch_list = "";
            while($row = mysql_fetch_array($res)){
                $cat_switch_list .= "case '".$row[1]."':
                                    $cat = ".$row[0].";
                                    break;";
            }
            //////////////////////
            foreach($foundKeywords as $key => $value) {  
                if($key<=1){


                    switch($value)
                    {
                        echo $cat_switch_list;
                        default:
                        $cat='1';
                    }

Теоретически, я считаю, что это должно работать, но что-то не так.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Вам лучше использовать mysql напрямую для запросов:

mysql_query('select id from gallery_category where name=\''.mysql_real_escape($name).'\'');

или сгенерировать массив из вашего результата:

$result = mysql_query('select * from gallery_category');
$categories = array();
while($row = mysql_fetch_num($result))
{
  $categories[$row[1]] = $row[0];
}

Тогда вы сможете найти правильныйid просто ищите его в массиве категорий: $id = $categories[$name].

Если вы хотите сгенерировать код и он выглядит так, вы можете использовать var_export (), чтобы сохранить переменную $ Categories в реальный код php.Вы хотите сгенерировать код?

0 голосов
/ 14 июля 2011

Сделайте запрос к вашей базе данных и загрузите результаты в ассоциативный массив:

$result = mysql_query('SELECT name, id FROM gallery_category');
$categories = array();
while ($row = mysql_fetch_assoc($result))
{
    $categories[$row['name']] = $row['id'];
}

foreach ($foundKeywords as $key => $val)
{
    if ($key <= 1)
    {
        $cat = $categories[$val];
        // Do whatever processing/output you need to do with this keyword
    }
}

NB: Этот код не проверен.

0 голосов
/ 14 июля 2011

Нет необходимости в switch утверждении вообще (вы запрашиваете не то, для чего switch операторы предназначены).

Просто сохраните значение $cat в той же таблице, которая описывает категории.Затем вы просто выбираете из этой таблицы, и в каждой строке у вас есть $value и $cat, которые вам нужны.

...