如果它总是每隔三个要素:
$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