2011-05-13 4 views
0

Comment puis-je trouver la distance entre deux valeurs de sous-chaînes dans une chaîne donnée? Par exemple, si j'ai le mot formidable, et je voulais trouver la distance entre les "i" s (1 espace à part). Merci de votre aide.Distance entre deux sous-chaînes

+2

ont vous avez essayé quelque chose? –

+0

Et s'il y a trois i dans la chaîne, voulez-vous le plus petit, le plus grand entre deux qui sont voisins, la diestance de la plus à gauche vers la plus droite? –

Répondre

1
$haystack = 'terrific'; 
$needle = 'i'; 

$distance = false; 
$pos1 = strpos($haystack,$needle); 
if ($pos1 !== false) { 
    $pos2 = strpos($haystack,$needle,$pos1+1); 
    if ($pos2 !== false) { 
     $distance = $pos2 - $pos1; 
    } 
} 

EDIT

ou

$haystack = 'terrific'; 
$needle = 'i'; 

$distance = false; 
$needlePositions = array_keys(array_intersect(str_split($haystack),array($needle))); 
if (count($needlePositions) > 1) { 
    $distance = $needlePositions[1] - $needlePositions[0]; 
} 
+0

+1 OP devrait probablement changer '$ pos1 + 1' en' $ pos1 + strlen ($ needle) 'pour utiliser des aiguilles de plus d'un caractère. Doit également décrémenter '$ distance' comme' 6 - 4 = 2' et OP veut '1', c'est-à-dire, un caractère entre. – webbiedave

1

Voici quelques méthodes avec ligne commentaires:

// We take our string 
$mystring = "terrific"; 

// Then the first character we want to look for 
$mychar1 = "i"; 
$mychar2 = "i"; 

// Now we get the position of the first character 
$position1 = strpos($mystring, $mychar1); 

// Now we use the last optional parameter offset to get the next i 
// We have to go one beyond the previous position for this to work 
// Properly 
$position2 = strpos($mystring, $mychar2, ($position1 + 1)); 

// Then we get the distance 
echo "Distance is: " . ($position2 - $position1) . "\n"; 

// We can also use strrpos to find the distance between the first and last i 
// if there are more than one 
$mystring2 = "terrific sunshine"; 
$position2 = strrpos($mystring2, $mychar2); 

echo "Distance is: " . ($position2 - $position1) . "\n";