我有一个mysql_query结果,我在代码的不同部分循环多次,每次使用mysql_data_seek($ result,0)重置到结果的开头。
我在这些结果上使用mysql_fetch_array,并希望从$ result中删除一些特定的行。基本上相当于unset($ result [$ row]),如果它是一个普通的数组。有没有办法做到这一点?
示例代码:
$result = mysql_query( $sql );
$num_rows = mysql_num_rows( $result );
if( $num_rows ){
for( $a=0; $a < $num_rows; $a++ ){
$row = mysql_fetch_array( $result );
if( my_check_function( $row['test'] ){
// do stuff
} else {
// remove this row from $result
}
}
}
mysql_data_seek( $result, 0 );
我知道我可以简单地取消设置($ row [$ a])来删除该特定行,但是在数据搜索之后,我在下次循环结果时会得到相同的原始结果行。
任何帮助将不胜感激。 ps - 不确定为什么在我的顶部文本中删除_并更改为斜体,我试图修复它但最终变为粗体.. :)
答案 0 :(得分:7)
最好的选择是重新编写查询,这样您就不必在对数据库运行查询后删除任何记录。那,或者将你的记录插入另一个数组,只是跳过你不想要的那些。
$survivors = array();
while ($row = mysql_fetch_array($result)) { // while we have records
if (do_something($row)) // if this is a good record
$survivors[] = $row; // save it for later
}
print_r($survivors); // who survived the cut?
答案 1 :(得分:2)
$result = mysql_query( $sql );
$new_rows = mysql_num_rows( $result );
$new_array = array();
if( $num_rows ){
for( $a=0; $a < $num_rows; $a++ ){
$row = mysql_fetch_array( $result );
if( my_check_function( $row['test'] ){
// do stuff
// populate new array with only validated data
$new_array[$a] = $row;
} else {
// remove this row from $result
// do not remove anything.
}
}
}
PS。您确定无法在SQL查询中排除不必要的行吗?
答案 2 :(得分:0)
为了热爱网络,请不要自己构建SQL查询。使用PDO。