2017-02-16 1 views

Répondre

2

Selon the function documentation, « Si l'aiguille est pas une chaîne, il est converti en un entier, et utilisé comme valeur ordinale d'un caractère. » En d'autres termes, si vous passez 9, il cherche un caractère de tabulation (ASCII 9.)

Essayez ceci:

$x = 1; 
$missing = ""; 
$newfname = "193555415493359"; 
while($x <= 9) { 
    $pos = strpos($newfname, (string)$x); 
    if($pos === false) {   
     $missing .= ",$x";     
    } 
    $x++; 
} 
echo $missing; 

Le seul changement est à cast$x comme une chaîne pour la recherche.

Bien, cela pourrait se faire plus efficacement:

$haystack = "193555415493359"; 
$needles = "123456789"; 
$missing = array_diff(str_split($needles), str_split($haystack)); 
echo implode(",", $missing); 
+0

Ceci est un bon moyen, mais ma première pensée était '$ pos = strpos (newfname de $, "$ x"),' et bien sûr moins intuitif '$ pos = strpos ($ newfname, $ x + 48);' – AbraCadaver

+0

Je suis fan des lancements explicites. Mon code PHP est plein de moulages (inutiles?) Parce que j'aime faire semblant de travailler dans un langage fortement typé. – miken32