如果它總是每隔三個要素:
$string = 'tshirt-blue-124-tshirt-blue-124-tshirt-blue-124';
$newArray = array_chunk(explode('-', $string), 3);
array_walk(
$newArray,
function(&$value) {
$value = implode('-', $value);
});
var_dump($newArray);
編輯
但是你必須知道提前多少元素:
$splitValue = 2;
$string = '333-red-333-red-333-red-333-red';
$newArray = array_chunk(explode('-', $string), $splitValue);
array_walk(
$newArray,
function(&$value) {
$value = implode('-', $value);
});
var_dump($newArray);
編輯#2
如果你不知道有多少元素,有一個重複的塊,然後尋找到。它建立在檢測字符串重複並將其用於壓縮的基礎上。你可以使用一個Suffix Trie數據結構來簡化邏輯。
編輯#3
作爲一個簡單的方法來試圖確定分割尺寸:
function getSplitSize($string) {
$splitSize = 2;
do {
$tempArray = array_chunk(explode('-', $string), $splitSize);
if ($tempArray[0] == $tempArray[1])
return $splitSize;
++$splitSize;
} while ($splitSize <= count($tempArray));
throw new Exception('No repetition found');
}
function splitStringOnRepetition($string) {
$newArray = array_chunk(explode('-', $string), getSplitSize($string));
array_walk(
$newArray,
function(&$value) {
$value = implode('-', $value);
}
);
return $newArray;
}
$string = 'tshirt-blue-124-tshirt-blue-124-tshirt-blue-124';
$array = splitStringOnRepetition($string);
var_dump($array);
$string = '333-red-333-red-333-red-333-red';
$array = splitStringOnRepetition($string);
var_dump($array);
是否已經提供了「單詞」,或者您想從字符串中檢測到它? – someOne
我們應該假設字符串不會總是這樣嗎?如果是這樣,那麼*如何解決這個問題,知道要尋找什麼? –
你能爲我們提供更多的一般信息嗎?您的示例問題的解決方案很簡單,但您想要實現什麼目標?你想分析一個字符串中的三個字的批次嗎? 「甚至字符串詞」是什麼意思? – jeromegamez