【问题标题】:PHP Repeated function not showing - syntax errorPHP重复函数未显示 - 语法错误
【发布时间】:2014-06-25 15:33:32
【问题描述】:

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

我已经让它与 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

【问题讨论】:

  • 分类的来源是什么? PHP数组?我想知道为什么在源数据上使用函数而不是循环。
  • 我认为在此处和/或在 JSFiddle 中发布有效的 HTML/JS 也会有所帮助。
  • 好的,我将添加到 jsfiddle
  • 嗨,这就是我想要实现的目标 - jsfiddle.net/GTGuX 在我的示例中,所有 osc 都替换为 fanapom(我的函数名称)
  • 您知道,最好一次创建所有数组,然后使用json_encode 回显它们。 :P 除了总体上更安全之外,您在 PHP 模式和 JS 模式之间的不断切换会破坏可读性。 (特别是因为您使用&lt;?php echo 而不是&lt;?=。:P)

标签: javascript php frameworks


【解决方案1】:

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

$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;

【讨论】:

    【解决方案2】:

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

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

    坦率地说,您最好不要再手动构建 JSON 了。 :P 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 版本。如果您坚持使用旧版本的 PHP,请改用 array(item1, item2)。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2016-08-14
      • 1970-01-01
      相关资源
      最近更新 更多