<?php
function get_video() {
$stripper = "Content...[video=1], content...content...[video=2],
content...content...content...[video=1], no more...";
preg_match_all("/\[video=(.+?)\]/smi", $stripper, $search);
$unique = array_unique($search[0]);
$total = count($unique);
for($i=0; $i < $total; $i++)
{
$vid = $search[1][$i];
if ($vid > 0)
{
$random_numbers = rand(1, 1000);
$video_id = $vid."_".$random_numbers;
$stripper = str_replace($search[0][$i], $video_id, $stripper);
}
}
return $stripper;
}
echo get_video();
?>
我想在$ stripper中删除重复的[video = 1],这是我需要的结果:
Content...1_195, content...content...2_963,
content...content...content..., no more...
我正在使用array_unique()函数删除重复的数组。从我上面的代码中,如果我print_r($ unique),重复数组已被删除:
Array ( [0] => [video=1] [1] => [video=2] )
但如果我回显get_video(),副本[video = 1]仍然存在:
Content...1_195, content...content...2_963,
content...content...content...1_195([video=1]), no more...
我无法弄清楚为什么! :(
答案 0 :(得分:2)
要删除重复项,请执行preg_replace_callback
并用“”替换重复的副本。在preg_match_all
电话
$hash = array();
$stripper = preg_replace_callback("/\[video=(.+?)\]/smi",function($m){
global $hash;
if(isset($hash[$m[0]]))
return "";
else{
$hash[$m[0]]=1;
return $m[0];
}
}, $stripper);
答案 1 :(得分:1)
你可以试试这个;
$stripper = "Content...[video=1], content...content...[video=2],
content...content...content...[video=1], no more...";
preg_match_all("/\[video=([^\]]*)/i", $stripper, $matches);
$result = array();
foreach ($matches[1] as $k => $v) {
if (!isset($result[$v])) {
$result[$v] = $v;
}
}
print_r($result);
输出;
Array
(
[1] => 1
[2] => 2
)