【发布时间】:2014-09-19 18:09:03
【问题描述】:
这是我想要做的:
我有 2 个列表。
列表 1:00F0001,00F0002,00F0003,00F0004,00F0005,00F0006,00F0007,00F0008,00F0009,00F0010
List 2 : 00F0006,00F0007,00F0008(此列表由第一项($debut)和最后一项($fin)生成)
我想做的是:
如果“列表 2”在“列表 1”中,则返回 true,仅此而已。
所以我尝试了 2 for 但我被阻止了:/
我的代码:
$id = substr($debut,0,4);
echo '</br>id : '.$id; /* = 00F0*/
$Start = substr($debut,4,25);
$End = substr($fin,4,25);
$range = $End - $Start +1;
echo '</br>Range : '.$range; /* = 3 with the example I gave*/
for ($i = 0;$i < $range;$i++){
$indice2 = $Start + $i;
$Num_Serie = str_pad($indice2, 4, '0', STR_PAD_LEFT);
$Num_Serie_Final[$i] = $id.''.$Num_Serie;
}
$ArrayNS = $Num_Serie_Final;
$i_W = 0;
while(($produit = $reponse->fetch())AND($check3 == "false")){
$ArrayProduit[$i_W] = $produit[1];
$i_W++;
}
for ($i2 = 0; $i2 < $i_W; $i2++){
for ($i3 = 0; $i3 < $range; $i3++){
if ($ArrayNS[$i2] == $ArrayProduit[$i3]){
.... ???? .....
}
}
}
第一个“for”是构建我的“List 2”。 “while”循环是生成我的“List 1”
然后我做了一个双“for”循环,但在这里我锁定了:/
编辑
我为感兴趣的人尝试了一些东西:
for ($i3 = 0; $i3 < $range; $i3++){
for ($i2 = 0; $i2 < $i_W; $i2++){
if ($ArrayNS[$i3] == $ArrayProduit[$i2]){
for ($indice=0; $indice < $range; $indice++){
if ($ArrayNS[$indice] == $ArrayProduit[$i2+$indice]){
$ok = true;
echo '$ArrayNS[$indice] : '.$ArrayNS[$indice].' == $ArrayProduit[$i2+$indice] : '.$ArrayProduit[$i2+$indice].'</br>';
}
else {
$ok = false;
$id_erreur = $ArrayNS[$indice];
echo 'Fail with : '.$ArrayNS[$indice].' !== '.$ArrayProduit[$i2+$indice].'</br>';
}
}
if ($ok) {
echo 'Success !!!';
return ($ok);
}
else {
echo 'Fail !!!';
return ($id_erreur);
}
}
}
}
可能不是最好的方法,但它确实有效^^
【问题讨论】:
-
不检查是否相等,而是检查是否不相等,如果不匹配则跳出内部循环。使用标志来确定您是中断还是完成了内部循环。在外循环内,内循环后,检查标志是否成功。
标签: arrays algorithm loops for-loop while-loop