PHP数组获取重复值

时间:2016-01-30 04:39:19

标签: php arrays

我正在处理从我的数据库中显示信息。当我在下面的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>";
        }
    }

}
?>

有人能发现问题出在哪里吗?

1 个答案:

答案 0 :(得分:0)

使用php函数array_unique();

array_unique($arrayname);

使用此方法,您将从array获取唯一值。避免重复值