目标
我想知道是否有更好的方法来编码这个问题?如果可能,我想重构。
要求:
输入示例(每个车辆代码将始终包含4个字符):
预期产出:
代码:
$vehicle_code = str_split($new_car->type);
$categories = [
'CB' => 'Compact',
'CC' => 'Compact',
'CD' => 'Compact',
'EB' => 'Economy',
'EC' => 'Economy',
'ED' => 'Economy',
'0L' => 'Luxury',
'1T' => 'Convertible',
'1V' => 'Van',
'3H' => 'Hybrid',
'3I' => 'Hybrid',
'3C' => 'Electric',
'3E' => 'Electric',
];
foreach($vehicle_code as $key=>$character) {
if (array_key_exists($key.$character,$categories))
{
$new_car->category[] = $categories[$key.$character];
}
}
if (array_key_exists(substr($new_car->type, 0, 2),$categories))
{
$new_car->category[] = $categories[substr($new_car->type, 0, 2)];
}
答案 0 :(得分:0)
不是拥有所有车辆代码的列表,而是为第一个字符的代码/类别对和最后一个字符的代码/类别对分别列出。然后,在循环中,您可以使用substr($your_vehicle_code, $index_0_or_1, 1)
来获取第一个或第二个字符,并在相应的数组中检查它是否存在。这样,您就可以将Compact
,Economy
,Premium
,Mid-Size
和Standard
各自的三个条目减少为一个,并且还可以放置您的功能更符合所提供的要求。
例如,您的第一个字符类别数组可能如下所示:
$first_char_categories = [
'C' => 'Compact',
'E' => 'Economy',
'I' => 'Mid-Size',
'P' => 'Premium',
'S' => 'Standard'
];
然后你可以检查这样的代码:
$my_vehicle_code = 'CB';
$first_char = substr($my_vehicle_code, 0, 1); //gives us the character 'C'
if(isset($first_char_categories[$first_char])) {
$first_char_category = $first_char_categories[$first_char];
//do something with the first character category
}
答案 1 :(得分:0)
试试这个:
我只添加了你在示例中列出的那些,但只是按照其他人的模式 我也改变了" T"和" F"你在哪里" 1T",1是重要的吗?
$re = '/(EC)\w{2}|(CC)\w{2}|\w(F)\w{2}|(LT)\w{2}|\w(T)\w{2}/';
$str = 'STAR';
preg_match($re, $str, $matches);
// Remove empty values and reset keys
$cat = array_values(array_filter($matches));
$categories = [
'CB' => 'Compact',
'CC' => 'Compact',
'CD' => 'Compact',
'EB' => 'Economy',
'EC' => 'Economy',
'ED' => 'Economy',
'IB' => 'Mid-Size',
'IC' => 'Mid-Size',
'ID' => 'Mid-Size',
'PB' => 'Premium',
'PC' => 'Premium',
'PD' => 'Premium',
'SB' => 'Standard',
'SC' => 'Standard',
'SD' => 'Standard',
'0L' => 'Luxury',
'F' => 'SUV',
'1G' => 'Crossover',
'1K' => 'Commercial',
'1P' => 'Pickup Truck',
'1Q' => 'Pickup Truck',
'1R' => 'RV',
'1S' => 'Sports',
'T' => 'Convertible',
'1V' => 'Van',
'1W' => 'Wagon',
'3H' => 'Hybrid',
'3I' => 'Hybrid',
'3C' => 'Electric',
'3E' => 'Electric',
];
//Echo category
Echo $categories[$cat[1]];