2013-01-21 5 views
0
<?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(); 
?> 

Je veux supprimer les doublons [video = 1] dans stripper $, c'est le résultat que j'ai besoin:Retirez correspondance double de chaîne par expression régulière

Content...1_195, content...content...2_963, 
content...content...content..., no more... 

J'utilise la fonction array_unique() pour supprime le tableau en double. De mon code ci-dessus, si je print_r (unique $), le tableau en double a été supprimé:

Array ([0] => [video=1] [1] => [video=2]) 

Mais si je fais l'écho get_video(), le double [video = 1] existent encore:

Content...1_195, content...content...2_963, 
content...content...content...1_195([video=1]), no more... 

Je n'arrive pas à comprendre pourquoi !!! :(

Demo: http://eval.in/7178

Répondre

2

Pour supprimer les doublons exécuter un preg_replace_callback et remplacer le double par "" Utilisez le code suivant juste avant preg_match_all appel,

$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); 

Voir http://eval.in/7185

+0

Parfait! Merci! – richard

1
.

Vous pouvez essayer ceci:

$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); 

Sorties;

Array 
(
    [1] => 1 
    [2] => 2 
) 
Questions connexes