当我尝试向数组添加新内容 (PHP) 时,数组被清空


Array gets emptied when i try to add new stuff to it (PHP)

我试图在用户每次点击类别后将内容添加到数组中,但由于某种原因,它不断替换数组中的所有内容。我不知道我哪里出错了。我尝试过"谷歌搜索"它,我找到的每个示例看起来都与我写的相似。请帮忙!

这些函数存储在核心中.php

function getStoreBacktrace($cat) {
    include("config.php");
    $backtrace = array();
    if ($cat != 0) {
        array_push($backtrace, $cat);
    }
    if (count($backtrace != 0)) {
        foreach($backtrace as $c){
            echo getBackCatName($c);
        }    
    }
    print_r($backtrace); // Put this to see what output is
}
function getBackCatName($c) {
    include("config.php");
    $query = 'SELECT * FROM `home_store_cats` WHERE `id`="'.$c.'"';
    $r_query = mysql_query($query);
    $result = mysql_fetch_array($r_query);
    echo ' > <a href="?cat='.$result['id'].'">'.$result['name'].'</a>';
}

此函数打印出用户可以单击的链接列表

function getStoreCat($cat) {
    include("config.php");
    $query = 'SELECT * FROM `home_store_cats` WHERE `main`="'.$cat.'" ORDER BY `name` ASC';
    $r_query = mysql_query($query);
    echo '<ul>';
    while ($result = mysql_fetch_array($r_query)) {
        echo '<li>';
        echo '<a href="?cat='.$result['id'].'">'.$result['name'].'</a>';
        echo '</li>';
    }
    echo '</ul>';
}

它在商店里被调用.php

<?php
include("config.php");
include("core.php");
$backtrace = array();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title><?php echo getSiteTitle().' :: '.getSiteSlogan(); ?></title>
</head>
<body>
    <table width="100%">
        <tr>
            <td colspan="2">
                <!-- Backtrace -->
                <a href="store.php">Home</a>
                <?php echo getStoreBacktrace($cat, $backtrace); ?>
            </td>
        </tr>
        <tr>
            <td>
                <!-- Categories -->
                <table>
                    <tr>
                        <td><?php echo getStoreCat($cat); ?></td>
                    </tr>
                </table>
            </td>
            <td>
                <!-- Products -->
                <table>
                    <tr>
                        <?php echo getStoreProducts($cat); ?>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</body>
</html>

现在,每当用户单击由该功能创建的链接时getStoreCat($cat)它都会刷新页面,其中包含要单击的新链接和要显示的新产品,具体取决于他们选择$cat。 我想将$cat推送到 $backtrace 数组。

就在这里:

$backtrace = array();

您正在有效地为每次调用 getStoreBacktrace() 重置数组。

编辑:

感谢您解决您的问题。现在很明显,问题是您需要通过多个页面视图使$backtrace持久化。使用会话执行此操作:

页面模板

<?php
session_start(); // enable sessions
include("config.php");
include("core.php");
?>
<!DOCTYPE html>
etc...

函数定义

<?php
function getStoreBacktrace($cat) {
    include_once("config.php"); // use include_once() to prevent possible errors
    if (!isset($_SESSION['backtrace']))
        $_SESSION['backtrace']= array();
    if ($cat != 0) {
        array_push($_SESSION['backtrace'], $cat);
    }
    ...

每次调用getStoreBacktrace时,您都会在$backtrace中实例化一个全新的数组。