我想根据要插入的书的格式分配类别。假设有3种不同的格式。漫画、精装本、平装本。我正在从另一个网站获取数据,下面列出了我在这个特定领域的当前代码。
$string = $item2['data'];
$number = preg_match("/((Comic)|(Hardcover)|(Paperback))[^A-Za-z]+/", $string, $fields);
$format = $fields[1];
输出为漫画、精装或平装
三个父类是漫画(1),精装(2),平装(3)子类别:制造商(4),系列(5)
(#)是每个的类别ID。
我的想法有点像。
$number = preg_match("/((Comic))[^A-Za-z]+/", $string, $fields);
if <what goes here for true?> //check to see if value is a comic
{$cat = array(1,4,5);}
else
if <what goes here for true?> //check to see if value is a hardback
{$cat = array(2,4,5);}
else // if not hardback or comic it must be a paperback
$cat = array(3,4,5);
但是。。。。。你会怎么安排?或者有更好的方法吗?
您可以使用查找数组:
$lookup = array(
'Comic' => 1,
'Hardcover' => 2,
'Paperback' => 3
);
if (preg_match("/(Comic|Hardcover|Paperback)[^A-Za-z]+/", $string, $match)) {
$cat = array($lookup[$match[1]], 4, 5);
}
有了这个,你甚至可以从数组键构建模式:
$pattern = '/(' . implode('|', array_map(function($key) { return preg_quote($key, '/'); }, array_keys($lookup))) . ')[^A-Za-z]+/';
我想你想要这样的东西:
preg_match("/(Comic|Hardback|Paperback)[^A-Za-z]+/", $string, $fields);
switch ($fields[1])
{
case ('Comic'):
$cat = array(1, 4, 5);
break;
case ('Hardback'):
$cat = array(2, 4, 5);
break;
case ('Paperback'):
$cat = array(3, 4, 5);
break;
default:
// Do something if none of above
}
虽然$string
的预期结构是什么?目前,它将匹配任何包含"Hardback"(或"Comic"或"Paperback")一词的字符,然后匹配任何非字母的字符一次或多次。这是你想要的吗?
还要注意,我已经明确检查了Paperback,并包含了一个默认值。在未来添加其他类型会更容易吗?或者如果给定的数据不是上述数据(你能确定它只会是这三种数据中的一种吗?)
经过编辑以纳入Basti的建议(使用$fields
而不是三个单独的preg_match
)。