【发布时间】:2018-03-14 23:30:49
【问题描述】:
目标
我想知道是否有更好的方法来解决这个问题?如果可能,我想重构。
要求:
- 给定 ACRISS 车辆代码列表 (http://www.acriss.org/car-codes.asp),根据车辆的字符将车辆分组。一辆车可以分为一个或多个类别。 LTAR 示例:由于 L 是第一个字符,它将被归类为 Luxury,并且由于 T 是第二个字符,它也将被归类为敞篷车。
- 紧凑型 - CB..、CC..、CD..(任何以 CB、CC 或 CD 开头的车辆代码。示例:CBAR、CDAR、CCAR)
- 经济 - EB..,EC..,ED..
- 全尺寸 - FB..,FC..,FD..
- 奢侈品 - L...(以 L 开头)
- Van - .F..(第二个字符是 F)
- 可转换 - .T..(第二个字符是 T,例如:DTAR)
- 混合 - ...H(第四个字符是 H 或 I,例如:CCAH)
- 电动 - ...C(第四个字符是 C 或 E,例如:CCAE)
输入示例(每个车辆代码总是有 4 个字符):
- ECAR
- CCAR
- SFAR
- 明星
- LTAR
预期输出:
- [类别] => 数组([0] => 经济)
- [类别] => 数组([0] => 紧凑)
- [类别] => 数组([0] => SUV)
- [类别] => 数组([0] => 可转换)
- [类别] => 数组([0] => 豪华 [1] => 可转换)
代码:
$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)];
}
【问题讨论】:
-
也许只有我一个人,但我不知道你到底在问什么。
-
我可能已经明白你在问什么了。这是在正确的方向吗? 3v4l.org/TRYEL
-
@Andreas 我已经用更多信息更新了这个问题。如果现在更有意义,请告诉我。
-
你甚至不能评论我的回答?
标签: php arrays multidimensional-array refactoring stdclass