Javascript PHP重复函数未显示-语法错误

Javascript PHP重复函数未显示-语法错误,javascript,php,frameworks,Javascript,Php,Frameworks,我想做一个类别和子类别的选择-所以当我按下一个类别,它将显示在它旁边的所有子类别 我已经使它与html和js的工作,但现在我使它在我的网站dinamically 这就是我现在用的 var categories_0 = [ <?php while ( fanapom_has_categories() ) { ?> ["<?php echo fanapom_category_id() ; ?>","<?php echo fanapom_cate

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

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

这就是我现在用的

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 } ?>

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

假设数据源是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;

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

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

坦白地说,你最好不要再徒手构建JSON了P PHP有一个内置函数,
json\u 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]
是PHP5.4SPIFF。如果您使用的是旧版本的PHP,请改用
数组(item1,item2)

类别的来源是什么?PHP数组?我想知道为什么要使用函数而不是源数据上的循环。我认为在这里和/或在JSFIDLE中发布工作的HTML/JS也会有帮助。好的,我将添加到JSFIDLE中。这就是我试图实现的-在我的示例中,所有osc都替换为fanapom(我的函数名),你知道,最好一次创建所有数组,然后使用
json\u encode
对它们进行回显:P除了总体上更安全之外,您在PHP模式和JS模式之间的不断切换还会破坏可读性。(尤其是因为您使用了

<?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 = [
                            ["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"]
                        ];
$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;
<?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";
}

?>