PHP嵌套FOR循环疑难解答

时间:2016-09-13 07:28:49

标签: php mysql database for-loop

我有一个连续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个值之后,我已经确定这是内循环运行,所以我试图在成功交换时突破内循环,但是外循环似乎仍然不起作用。

我知道我错过了一些东西,而且我已经坚持了一段时间。

非常感谢对此问题涉及的逻辑和顺序的一些了解。

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 );
    }


?>