PHP - 参考数组不止一次针对不同的结果
我不知道如何搜索我遇到的这个问题,也不知道我是否使用了正确的术语。PHP - 参考数组不止一次针对不同的结果
我有一个表与各种记录,每个记录有一个类别集。我想查询一次表格并将结果输出到网页上的相关部分。
我迄今已完成:
$result_f1 = $db->query("SELECT * FROM files WHERE user_id = $user_id ") or die('cannot show tables');
... some html ...
if($result_f1) {
while($row3 = $result_f1->fetch_object()) {
if ($row3->category == "image") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row3->filename,'" alt="Photo"></div>';
}
}
}
...more html onto next section...
if($result_f1) {
while($row4 = $result_f1->fetch_object()) {
if ($row4->category == "vehicle") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row4->filename,'" alt="Photo"></div>';
}
}
}
所以一个部分,我想用“图像”类和“车辆”一节下一节匹配记录。
使用上面的代码,它只显示while循环的记录,而不是第二个循环。我应该做什么不同?
那是因为你正在使用fetch_object
方法获取数据。
宁可fetch_object使用fetch_all如下:
$result_f1 = $db->query("SELECT * FROM files WHERE user_id = $user_id ") or die('cannot show tables');
$dataSet = $result_f1->fetch_all(MYSQLI_ASSOC);
if($dataSet) {
foreach($dataSet as $row3) {
if ($row3['category'] == "image") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row3['filename'],'" alt="Photo"></div>';
}
}
}
...more html onto next section...
if($dataSet) {
foreach($dataSet as $row4) {
if ($row4['category'] == "vehicle") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row4['filename'],'" alt="Photo"></div>';
}
}
}
这是因为fetch_ [对象/阵列/ ASSOC]仅返回一个结果行并且不会返回所有数据集。
例如:
mysqli_result :: FETCH_ASSOC - mysqli_fetch_assoc - 获取结果列 作为关联数组
和当你在遍历该数据集,PHP罩盖下方使用一些函数如next & current来遍历该对象m,而next
函数只是将对象/数组指针前进1。
下 - 在第一个迭代结束推进阵列
的内部指针,你将到达[对象/数组]的最后一个值的指针,所以在下一迭代时间,你将无法遍历该对象,除非你reset该指针为0
如下:
$result_f1 = $db->query("SELECT * FROM files WHERE user_id = $user_id ") or die('cannot show tables');
... some html ...
if($result_f1) {
while($row3 = $result_f1->fetch_object()) {
if ($row3->category == "image") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row3->filename,'" alt="Photo"></div>';
}
}
}
...more html onto next section...
$result_f1->data_seek(0);
if($result_f1) {
while($row4 = $result_f1->fetch_object()) {
if ($row4->category == "vehicle") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row4->filename,'" alt="Photo"></div>';
}
}
}
发生这种情况的原因是,因为一旦第一个while循环完成,结果集为空。你需要得到完整的结果集并放入一个变量。
像
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch all of the values of the first column */
$results = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
然后
foreach (results as key => value){
// use hte results
}
假设哟您正在使用MySQLi,您可以使用data_seek(0)
来重置指针。
http://php.net/manual/en/mysqli-result.data-seek.php
您应该考虑每个部分(WHERE user_id = $user_id AND category="image"
)做不同的查询。并且获取所有字段(SELECT *
)也可能不是必需的。
嗯,我认为你不能这样做,你应该使用2查询。类似于“image”的类别'',类似于“vehicule”的第二类'' – kaldoran