2014-10-22 8 views
0

я пытаюсь кусок моего SKU на более мелкие части, Unfortunetly ниже код не работает, как иногда мой SKU являются 12 цифр, иногда 10.расставание SKU на более мелкие части

$this->skuMap['simple'][$sku] = [ 
    'RefId' => substr($sku, 0, 5), 
    'Color' => substr($sku, 5, -3), 
    'Name' => $product->getName(), 
]; 

Я довольно уверен, что есть способ preg_split, но я не уверен в регулярном выражении, вот моя неудачная попытка.

$sku = preg_split(['/^[0-9]{5}/','/([0-9]{5})([0-9]{3})/'], $sku, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE); 
+0

Я понятия не имею, что такое sku, но не можете ли вы использовать 'strlen()', если у вас есть переменная длина? – kero

+0

Как вы хотите, чтобы они разделились? Можете ли вы привести несколько примеров ввода, а затем ожидаемый результат? – slapyo

+0

Если вы собираетесь это сделать, вы должны действительно сделать формат * до того, как вы их создадите, и вам придется разделить. В противном случае сначала выполните проверку длины. – Amelia

ответ

1

Регулярное выражение, которое вы ищете, это "/^([0-9]{5})([0-9]{3})([0-9]+)$/".

$matches = []; 
if (preg_match("/^([0-9]{5})([0-9]{3})([0-9]+)$/", $string, $matches) !== -1) { 

    $id = $matches[1]; 
    $color = $matches[2]; 
    $info = $matches[3]; 

} else { 
    throw new \RuntimeException("bad SKU"); 
} 

Разбитые пять цифр, 3 цифры, а затем любое количество цифр, каждое в отдельных группах.

+1

Принимая и плюс один, спасибо. – ehime

0

Принятие выше, но это также работает.

$this->skuMap['simple'][$sku] = [ 
    'RefId' => substr($sku,0,5), 
    'Color' => substr(substr_replace($sku,'',0,5),0,3), 
    'Name' => $product->getName(), 
]; 
Смежные вопросы