【发布时间】:2017-01-20 17:22:50
【问题描述】:
我有一个连续 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 个值之后,我仍将其识别为内部循环仍在运行,因此我尝试在成功交换时打破内部循环,但外部循环似乎仍然无法正常工作。
我知道我错过了一些东西,而且我已经被困了一段时间了。
我们将不胜感激对这个问题所涉及的逻辑和顺序的一些见解。
【问题讨论】:
-
此表未标准化。将图像存储在另一个表中会更好,您不会遇到这个问题。
标签: php mysql database for-loop