重复的函数没有显示-语法错误

PHP Repeated function not showing - syntax error

本文关键字:显示 语法 错误 函数      更新时间:2023-09-26

我想做一个类别和子类别选择-所以当我按下一个类别时,它会在它旁边显示所有子类别。

我已经使它与html和js的工作,但现在我使它在我的网站动态

这是我现在使用的

var categories_0 = [
    <?php while ( fanapom_has_categories() ) { ?>       

["<?php echo fanapom_category_id() ; ?>","<?php echo fanapom_category_name() ; ?>"], 
<?php } ?>
];


<?php while ( fanapom_has_categories() ) { ?>       
var categories_<?php echo fanapom_category_id() ; ?> = [<?php while ( fanapom_has_subcategories() ) { ?>["<?php echo fanapom_category_id() ; ?>","<?php echo fanapom_category_name() ; ?>"],<?php } ?>];
<?php } ?>

但是我用了这段代码两次,但是我发现它只工作一次。

 <?php while ( fanapom_has_categories() ) { ?>  

如果我单独使用

 var categories_0 = [
    <?php while ( fanapom_has_categories() ) { ?>       

["<?php echo fanapom_category_id() ; ?>","<?php echo fanapom_category_name() ; ?>"], 
<?php } ?>
];

或单独

<?php while ( fanapom_has_categories() ) { ?>       
var categories_<?php echo fanapom_category_id() ; ?> = [<?php while ( fanapom_has_subcategories() ) { ?>["<?php echo fanapom_category_id() ; ?>","<?php echo fanapom_category_name() ; ?>"],<?php } ?>];
<?php } ?>

我得到正确的输出

但是当我把它们混合在一起时,我只得到第一个的输出,

我怎样才能使它工作给我正确的输出?我想我不应该使用这段代码两次

  <?php while ( fanapom_has_categories() ) { ?> 

但我不知道如何将两者混合在一起-请帮助。


M O R E I N F O


下面是我想要的输出

  var categories_0 = [
                            ["1", "maincategoryname"],
                            ["2", "maincategoryname"],
                            ["3", "maincategoryname"],
                            ["4", "maincategoryname"],
                            ["5", "maincategoryname"],
                            ["6", "maincategoryname"],
                            ["7", "maincategoryname"],
                            ["8", "maincategoryname"]
                        ];


                        var categories_1 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
                         var categories_2 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
 var categories_3 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
 var categories_4 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
 var categories_5 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
 var categories_6 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
 var categories_7 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];
 var categories_8 = [
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"],
                            ["subcategoryid", "subcategoryname"]
                        ];

1 2 3 4 5 6 7 8是主要的类别id

下面是如何在示例中打印多维javascript数组的方法,假设数据源是PHP中的类似多维数组:

$categories = array(
      "1" => array("one",   array("1" => "a", "2" => "b", "3" => "c"))
    , "2" => array("two",   array("4" => "d", "5" => "e", "6" => "f"))
    , "3" => array("three", array("7" => "g", "8" => "h", "9" => "i"))
);
$categories_js = 'var categories_0 = [';
$category_subs_js = '';
$delimiter1 = '';
$delimiter2 = '';
foreach ( $categories as $category_id => $category_info ) {
    $categories_js .= $delimiter1 . '["' . $category_id . '", "' . $category_info[0] . '"]';
    $delimiter1 = ', ';
    $category_subs_js .= 'var categories_' . $category_id . ' = [';
    foreach ( $category_info[1] as $subcat_id => $subcategory ) {
        $category_subs_js .= $delimiter2 . '["' . $subcat_id . '", "' . $subcategory . '"]';
        $delimiter2 = ', ';
    }
    $category_subs_js .= "];'n";
    $delimiter2 = '';
}
$categories_js .= "];'n";
echo $categories_js;
echo $category_subs_js;

您的fanapom_has_函数可能会耗尽迭代器,这将阻止您第二次获得列表。(原因#422835为什么可变的全局状态是邪恶的,顺便说一句。如果有选择的话,我建议您减少API对它们的依赖。仅仅因为WordPress这样做,并不意味着这是一个好主意。

为了解决这个问题,你需要以某种方式重置迭代器,或者同时为主类别和每个子类别构建数组(所以你只需要一次遍历列表)。

坦率地说,你最好不要浪费时间手工构建JSON。PHP有一个内置函数json_encode来做这个。你所要做的就是构建数组。你可以一次完成。

也许像

<?php
$categories = [ [] ];
while (fanapom_has_categories()) {
    $id = fanapom_category_id();
    $categories[0][] = [ "$id", fanapom_category_name() ];
    $categories[$id] = [];
    while (fanapom_has_subcategories()) {
        # btw, this looks odd to me, using the same function to get info on the
        # category and subcategory, but using different functions to iterate through
        # the respective lists.
        $categories[$id][] = [ fanapom_category_id(), fanapom_category_name() ];
    }
}
foreach ($categories as $id => $subcategories) {
    echo "var categories_$id = ", json_encode($subcategories), ";'n";
}
?>

(注:[ item1, item2 ]是PHP 5.4 spiff。如果您坚持使用旧版本的PHP,请使用array(item1, item2)代替。