以下代码应该打印 ,2,6,7,8
- 至少我想要它。我错过了什么?目的是找到一个长数字的缺失数字。
$x = 1;
$missing = "";
$newfname = "193555415493359";
while($x <= 9) {
$pos = strpos($newfname,$x);
if($pos === false) {
$missing .= ",$x";
}
$x++;
}
echo $missing;
答案 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);