如何在符号字符串“ - ”中爆炸甚至单词?对于前:
$string = 'tshirt-blue-124-tshirt-blue-124-tshirt-blue-124';
或
$string = '333-red-333-red-333-red-333-red';
我需要这样的数组:
$string[0] = 'tshirt-blue-124';
$string[1] = 'tshirt-blue-124';
$string[2] = 'tshirt-blue-124';
或
$string[0] = '333-red';
$string[1] = '333-red';
$string[2] = '333-red';
$string[3] = '333-red';
感谢
答案 0 :(得分:3)
如果它总是每三个元素:
$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
如果您不知道重复块中有多少元素,请查看Lempel-Ziv-Welsh (LZW) compression algorithm。它建立在检测字符串中的重复并利用它们进行压缩的基础上。您可以使用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);
答案 1 :(得分:1)
对于高级但高效的方法,您可以使用preg_match()
:
$string = 'tshirt-blue-124-tshirt-blue-125-tshirt-blue-126';
$pattern = "/([A-Za-z]*-[A-Za-z]*-[\d]*)-?/";
preg_match_all($pattern, $string, $matches);
echo "<pre>";
print_r($matches[1]);
echo "</pre>";
它将输出:
Array
(
[0] => tshirt-blue-124
[1] => tshirt-blue-125
[2] => tshirt-blue-126
)
你可以按照你想要的方式设置模式..
答案 2 :(得分:0)
你可以做这样的事情
$string = 'tshirt-blue-124-tshirt-blue-124-tshirt-blue-124';
$tmp = explode("-", $string);
while ($tmp) {
$output[] = implode('-', array_splice($tmp, 0, 3));
}
print_r($output);
答案 3 :(得分:0)
尝试 -
$string = 'tshirt-blue-124-tshirt-blue-124-tshirt-blue-124';
$new = explode('-', $string);
$i = 0;
$result = array();
while ($i < count($new)) {
$result[] = $new[$i].'-'.$new[$i+1].'-'.$new[$i+2];
$i += 3;
}
var_dump($result);
答案 4 :(得分:0)
爆炸
$string = explode("tshirt-", $string);
现在您必须将值添加到每个Array元素
foreach($string as &$v){
$v = "tshirt-" . $v;
$v = rtrim($v, "-");
}
这是一个非常简单易懂的解决方案。