我有一个连续10列的数据库,每个列都包含一个图像名称。
himage1,himage2,himage3等...
用户可以单独删除任何这些图像,相应的列值设置为“na”,表示没有图像。
但是说有3张图片,这意味着从'himage4'开始,字段为'na',用户删除'himage1',然后该行将如下所示:
himage1 ='na',himage2 =“... img2.jpg”,himage3 =“... im3.jpg”,himage4 ='na',himage5 ='na'等......
这会产生一个问题,因为我有另一个专栏'hnumimage',它控制着要显示的图像数量。
但是如果'hnumimage'是2,在这个例子中,因为只有2个图像,我用来显示图像的循环仍然会尝试显示'himage1',即使它是空白的。
出于这个原因,我正在尝试创建一个函数来检测字段是否为“na”,然后检查以下任何字段是否具有有效图像。如果是这样,请向前移动该图像值。
所以在上面的例子中,在运行函数后它应该如下所示:
himage1 =“... img2.jpg”,himage2 =“... im3.jpg”,himage3 ='na',himage4 ='na',himage5 ='na'等......
我正在使用2个嵌套for循环,但是我遇到了涉及逻辑的问题。
for ( $i = 1; $i <= 10; $i++ ) {
// IF IMAGE FIELD IS NA
if ( $rs_home_delete_select_array[ 'himage' . $i ] == na ) {
//CHECK FOLLOWING IMAGES
for ( $o = $i + 1; $o <= 10; $o++ ) {
// IF FOUND IMAGE VALUE
if ( $rs_home_delete_select_array[ 'himage' . $o ] != na ) {
// MOVE THAT VALUE FORWARD, and CLEAR OLD FIELD
$vCurrImgVal = $rs_home_delete_select_array[ 'himage' . $o ];
$sql_arrange_img = "UPDATE tblhome SET himage" . $i . " = '" . $vCurrImgVal . "', himage" . $o . " = 'na' WHERE hid = 1";
$rs_arrange_img = mysqli_query( $vconn_db, $sql_arrange_img );
}
}
}
这有效,但只有一次。
上面的示例如下所示:
himage1 =“... img3.php”,himage2 ='na',himage3 ='na',himage4 ='na'等
内循环成功地将'himage1'与'himage2'交换,但之后也将'himage1'与'himage3'进行比较,因此将其替换为'himage3',将所有其他字段留空。
即使在成功交换了2个值之后,我已经确定这是内循环运行,所以我试图在成功交换时突破内循环,但是外循环似乎仍然不起作用。
我知道我错过了一些东西,而且我已经坚持了一段时间。
非常感谢对此问题涉及的逻辑和顺序的一些了解。
答案 0 :(得分:0)
添加// I solved this problem.
private int mOriginProgress;
private boolean mIsDrag;
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mIsTouched = true;
mOriginProgress = seekBar.getProgress();
}
@Override
public void onProgressChanged(SeekBar seekBar, int p, boolean fromUser) {
if (mOriginProgress == p) {
return;
}
if (mIsDrag) {
// do something
} else {
if (Math.abs(mOriginProgress - p) > 5) {
seekBar.setProgress(mOriginProgress);
} else {
mIsDrag = true;
}
}
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mIsDrag = false;
}
,一旦找到要替换它的下一个图像,就会退出循环。
break
答案 1 :(得分:0)
我认为嵌套循环是一种非常复杂的方法。并且您遇到的问题是,在搜索时阵列正在发生变化。我只想把它分成两步。首先,获取您想要的数据。然后休息。
当你在这里时,最好引用你的字符串值(所以'na'
代替na
)
<?php
$rs_home_delete_select_array=array('himage1' => 'na', 'himage2' => "...img2.jpg", 'himage3' => "...im3.jpg", 'himage4' => 'na', 'himage5' => 'na');
$temp = array();
$idx = 1;
//Step 1 put data first
for ( $o = $i + 1; $o <= 10; $o++ ) {
if ( isset($rs_home_delete_select_array[ 'himage' . $o ]) && $rs_home_delete_select_array[ 'himage' . $o ] != 'na' ) {
$temp[ 'himage' . $idx ] = $rs_home_delete_select_array[ 'himage' . $o ];
$idx++;
}
}
//Step 2. Put 'na' elements later
for ( $o = $i + 1; $o <= 10; $o++ ) {
if ( isset($rs_home_delete_select_array[ 'himage' . $o ]) && $rs_home_delete_select_array[ 'himage' . $o ] == 'na' ) {
$temp[ 'himage' . $idx ] = $rs_home_delete_select_array[ 'himage' . $o ];
$idx++;
}
}
//Update DB
foreach ($temp as $key => $val){
$sql_arrange_img = "UPDATE tblhome SET `$key` = '$val' WHERE hid = 1";
$rs_arrange_img = mysqli_query( $vconn_db, $sql_arrange_img );
}
?>