Php javascript 与将 JavaScript 传递给 PHP 冲突


Php javascript conflict with passing javascript to php

我有一个小问题。 我在 php 中有几个数组,具有不同的团队名称。 每个数组都包含特定联赛的球队。 当我单击添加按钮时,我可以选择向日历添加新条目。 我希望下拉菜单中只有该联赛的球队。 单击添加按钮时,我调用了一个 JavaScript 函数,该函数知道单击了哪个除法。 但是,为了给javascript显示哪些团队的信息,我必须传递给它一个php数组。 我遇到的问题是告诉php将哪个数组传递给javascript,这取决于哪个联盟javascript在上。 我不想自己指定数组,因为有一个添加联赛的选项,这意味着每次添加联赛时都必须编写更多代码。 该网站的重点是动态的。

下面是一些代码。

for ($i = 0;$i<$sizeof($leaguesarray);$i++){
    $htmlimploded[$i] = implode($html[$i]);
}

在这里,我使用 emplode 使我所有的 php 数组都可以读到 JavaScript 中。

for (var h = 0; h<size; h++){ // goes through every league 
    if(h == leaguenum){ // finds the league for the clicked add button
        // this is the line that I have trouble with I can't think of 
        //anyway of telling it which array to use since it is serverside code.
        var myarray = ["<? echo $htmlimploded[]?>"]; 
    }
}

上面的Javascript代码。

内爆有效,但为什么不json_encode($array)?这是一种更简单的内置方式,可以将php数组转换为javascript对象或数组。如果您有类似以下内容:

$league1 = array('team1', 'team2');
$league2 = array('team3, 'team4') ;

然后制作一个多维关联数组:

$all_teams = array('league1'=>$league1, 'league2'=>$league2);

将其编码为 Javascript 对象并将其打印到 JS 中:

$encoded = json_encode($all_teams);
print 'var teamObject = '.$encoded.';';

如果你要控制台.log(teamObject),你会看到这样的东西:

{"league1": ["team1", "team2"], "league2": ["team3", "team4"]}

看起来很复杂,但现在您可以非常轻松地拉出您想要的数组。league 1 数组是 teamObject.league1,league2 数组是 teamObject.league2,依此类推。

我认为您在以下代码中遗漏了一些内容:

var myarray = ["<? echo $htmlimploded[]?>"]; 

按顺序,它应该是:

var myarray = ["<?php echo $htmlimploded[]?>"]; 

假设 PHP 知道联赛和球队的名称,并且 JavaScript 知道被点击的联赛名称,您可以将球队名称的数组包装在一个对象中,并将联赛作为属性的名称。

<?php 
$arr = array("League1" => array("Team 1", "Team 2"), 
             "League2" => array("Team 3", "Team 4")
       );
?>
var obj = {};
<?php foreach ($arr as $k => $v): ?>
obj.<?php echo $k; ?> = ["<?php echo implode('","', $v); ?>"];
<?php endforeach; ?>

然后,当用户选择联盟时,可以遍历对象的属性(即联盟名称)的数组。

clickedLeague = "League1";
for (var i = 0; i < obj[clickedLeague].length; i++)
{
    console.log(obj[clickedLeague][i]); // Logs the team name to console
}