通过字符串迭代查找丢失的数字不起作用

时间:2017-02-16 18:38:57

标签: php strpos

以下代码应该打印 ,2,6,7,8 - 至少我想要它。我错过了什么?目的是找到一个长数字的缺失数字。

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

1 个答案:

答案 0 :(得分:2)

根据the function documentation,&#34;如果needle不是字符串,则将其转换为整数并应用为字符的序数值。&#34;换句话说,如果你传递它9,它正在寻找制表符(ASCII 9。)

请改为尝试:

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

唯一的变化是将cast $x作为搜索字符串。

尽管如此,这可以更有效地完成:

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