我正在处理从我的数据库中显示信息。当我在下面的model / itemTile.php中执行print_r来检查我的数组,$ this-> display时,我注意到它已经从我的数据库中存储了2个数据副本。我检查了我的数据库,肯定只有一个数据副本。
我创建了一个计数器变量$ this-> counter,以查看周围的while循环正在做什么。原始数据有6个非重复行。正如您在下面附带的jpg中看到的那样,程序递增并将计数器回显到6,然后它执行" print_r($ this-> display)"在while循环之外的行,然后由于一些奇怪的原因返回到while循环,递增计数器,并打印$ this->计数器和$ this->再次显示!
我可以删除副本,但我更愿意弄清楚为什么要开始使用该值的两个副本。
由于这最初是一个专注于MVC的PHP类项目,因此所有内容都放在控制器,模型和视图中。我在下面列出了相关模型和查看代码:
.jpg的: PHP Site
模型/ itemTile.php
<?php
require_once('siteInfo.php');
class itemTile implements siteInfo {
private $term;
private $session;
private $result;
private $display = array();
private $counter = 0;
public function __construct($session) {
$this->session = $session;
}
public function getContent() {
$this->result = $this->session->db->prepare("SELECT productName, sciName, price FROM products");
$this->result->execute();
$this->result->bind_result($pN, $sN, $pz);
while ($this->result->fetch()) {
if (array_key_exists($pN, $this->display)) {
$this->display[$pN]["price"][] = $pz;
} else {
$this->display += [
$pN => [ //Product Name was used to id array because not all item have sciName,
"sciName" => [$sN], //and not all item have only 1 sku (1 item with different size = multiple pid).
"price" => [$pz]
]
];
}
$this->counter++;
echo $this->counter . "<br />";
}
$this->result->close();
print_r($this->display);
echo "<br />";
}
public function setContent() {
$this->getContent();
return $this->display;
}
}
?>
查看/ itemTile.php
<?php
class itemTileView {
private $model;
public function __construct(itemTile $model) {
$this->model = $model;
}
public function output(){
foreach ($this->model->setContent() as $item => $detail) {
$itemLink = preg_replace('/\s+/','_', $item);
echo "<div class= 'tileSpace'>";
echo "<a href='itemPages/" . $itemLink. "/home.php'>";
echo "<img alt='" . $item . "' src='itemPages/" . $itemLink . "/thumbnail.jpg' width='100' height='100'>";
echo "</a>";
echo "<p>" . $item . ": " . $detail["sciName"][0] . "</p>";
if (count($detail["price"]) > 1) {
echo "<p>" . min($detail["price"]). " - " . max($detail["price"]). "</p>";
} else {
echo "<p>" . $detail["price"][0] . "</p>";
}
echo "</div>";
}
}
}
?>
有人能发现问题出在哪里吗?
答案 0 :(得分:0)
使用php函数array_unique();
array_unique($arrayname);
使用此方法,您将从array获取唯一值。避免重复值