2013-04-05 64 views
2

我想從零開始使用CodeIgniter 2.x創建一個網上商店。一店對我們的產品有它自己的製造商,如格洛克,馬駒,卡拉什尼科夫,博克,CZ,基茲利亞爾,GroundZero等..字符串中的文字縮寫PHP

我需要創建獨特SKU(庫存單位)product.idproduct.manufacturer混合的每種產品的名稱。這是沒有問題做到這一點,即:SKUid=13manufacturer=GroundZeroname=Striker II產品變爲:groundzero-0013

我需要生成的縮寫,因此SKU變成這樣:grzr-0013gnzr-0013

任何解決方案?

+0

不能你只是做str_replace函數? – Scott 2013-04-05 09:26:15

+0

是的,我可以,但問題是在「縮寫製造商」,不知道如何以編程方式縮寫字符串 – aspirinemaga 2013-04-05 09:27:54

+2

我認爲最好的選擇是將縮寫存儲在分貝,而不是嘗試計算它。 – bitWorking 2013-04-05 09:29:46

回答

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; 
} 
+1

這樣一個不錯,簡單的方法,天才!謝謝 – aspirinemaga 2013-04-05 12:05:56

+0

不客氣:) – HamZa 2013-04-05 13:35:31

+1

@aspirinemaga我在電車,然後我雖然如果在傳遞的字符串中沒有大寫字母?所以看看編輯後的代碼,我添加了ucfirst()!爲了看到差異,例如嘗試傳遞'glock'! – HamZa 2013-04-05 13:50:20