Я пытаюсь разделить мой sku на более мелкие части, к сожалению, приведенный ниже код не работает как
иногда мои sku 12 цифр, иногда 10.
$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-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 цифры, затем любое количество цифр, каждая в отдельных группах.
Принимая выше, но это также работает.
$this->skuMap['simple'][$sku] = [
'RefId' => substr($sku,0,5),
'Color' => substr(substr_replace($sku,'',0,5),0,3),
'Name' => $product->getName(),
];