PHP中字符串的文本缩写

时间:2013-04-05 09:23:18

标签: php codeigniter-2

我正在尝试使用CodeIgniter 2.x从头开始创建一个网上商店。商店有自己的制造商的产品,如 Glock,Colt,Kalashnikov,Boker,CZ,Kizlyar,GroundZero 等......

我需要为与product.idproduct.manufacturer混合的每种产品创建唯一的 SKU (库存单位)名称。这样做没有问题,例如:id=13manufacturer=GroundZeroname=Striker II的产品的 SKU 变为: groundzero-0013

我需要生成缩写,以便SKU变成这样: grzr-0013 gnzr-0013

任何解决方案?

1 个答案:

答案 0 :(得分:2)

我根据您提到的规格编码了以下SKU生成器,您可以更改$l以使其更独特(在某种程度上):

echo SKU_gen('ZeroGround', 13, 2).'<br>'; // zrgr-0013
echo SKU_gen('ZeroGround', 13, 3).'<br>'; // zrgrn-0013
echo SKU_gen('Glock', 14, 3).'<br>'; // glc-0014
echo SKU_gen('CZ', 15, 3).'<br>'; // cz-0015
echo SKU_gen('Kizlyar', 20).'<br>'; // kz-0020

function SKU_gen($string, $id = null, $l = 2){
    $results = ''; // empty string
    $vowels = array('a', 'e', 'i', 'o', 'u', 'y'); // vowels
    preg_match_all('/[A-Z][a-z]*/', ucfirst($string), $m); // Match every word that begins with a capital letter, added ucfirst() in case there is no uppercase letter
    foreach($m[0] as $substring){
        $substring = str_replace($vowels, '', strtolower($substring)); // String to lower case and remove all vowels
        $results .= preg_replace('/([a-z]{'.$l.'})(.*)/', '$1', $substring); // Extract the first N letters.
    }
    $results .= '-'. str_pad($id, 4, 0, STR_PAD_LEFT); // Add the ID
    return $results;
}