我有一个小问题。 我在 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
}