Javascript 向PHP数组中的特定键位置添加值
我正在使用一个库,其中包括一个名称数组,并创建一个组合框,其中包含以该数组中的内容命名的Javascript 向PHP数组中的特定键位置添加值,javascript,php,arrays,string,web,Javascript,Php,Arrays,String,Web,我正在使用一个库,其中包括一个名称数组,并创建一个组合框,其中包含以该数组中的内容命名的元素。它还为节点的值属性指定获取名称的索引的值。因此,例如,如果数组的索引0包含“foo”,那么它将创建如下标记:foo。以下是该库的代码供参考: function generateSelect(objDimensionAssoc, obj, select_name, label_name, function_name, state, DivAlignement) { //Valid object b
元素。它还为
节点的值属性指定获取名称的索引的值。因此,例如,如果数组的索引0包含“foo”,那么它将创建如下标记:foo
。以下是该库的代码供参考:
function generateSelect(objDimensionAssoc, obj, select_name, label_name, function_name, state, DivAlignement)
{
//Valid object before
sChaine = "";
if( (obj != null) && (obj != undefined) && (obj != "") && (parseInt(countObject(obj)) > 0) ){
if( state == 'show' ){
sChaine +="<label for='"+select_name+"' ><span>"+label_name+"</span></label>\n";
sChaine +="<div class='"+DivAlignement+"'>\n";
if(function_name != "")
sChaine +="<select name='"+select_name+"' id='"+select_name+"' onchange='"+function_name+"' >\n";
else
sChaine +="<select name='"+select_name+"' id='"+select_name+"'>\n";
//lang = variable reconnu dans tout les pages
for (var x=0; x < obj.length; x++){
//One or two domentionnal array
if(obj[x] != null){
if(objDimensionAssoc == "1"){
if(chaineUrl){
sChaine += compare_and_create( x, obj[x], chaineUrl[select_name], select_name);
} else {
sChaine += compare_and_create( x, obj[x], "", select_name);
}
} else {
if(chaineUrl){
sChaine += compare_and_create( x, obj[x][lang], chaineUrl[select_name], select_name);
} else {
sChaine += compare_and_create( x, obj[x][lang], "", select_name);
}
}
}
}
sChaine +="</select>\n";
sChaine +="</div>\n";
}
return(sChaine);
} else {
//empty array
if( state == 'show' ){
sChaine +="<label for='"+select_name+"' ><span>"+label_name+"</span></label>\n";
sChaine +="<div class='"+DivAlignement+"'>\n";
sChaine +="<select name='"+select_name+"' id='"+select_name+"' disabled='true' >\n";
sChaine +="<option value='0'> </option>\n";
sChaine +="</select>\n";
sChaine +="</div>\n";
}
return(sChaine);
}
}
function compare_and_create( key, innerText, string_compare,select_name)
{
if(key == string_compare){
return ("<option value='"+key+"' selected='selected'>"+innerText+"</option>\n");
} else {
return ("<option value='"+key+"'>"+innerText+"</option>\n");
}
}
现在这个工作非常好。例如,getStationList()
的输出是“[\”LA GRANDE RIVIERE A\“]”
,然后我使用JSON.parse()
将其转换为javascript数组
不幸的是,与
节点关联的值将是0、1、2、…、n,其中n是站数-1。我想将站点的名称与其站点ID(我从数据库中恢复)相关联,因此与
节点关联的值将是这些ID。要做到这一点,我想我需要在相应ID的索引处推送站点的名称。我已经尝试过这样做,并对getStationList()
进行了以下修改:
不幸的是,这不起作用,因为getStationList()
函数的输出现在是这样的:“{\“6047\”:[\“LA GRANDE RIVIERE A\”]}”
。那么,我必须如何修改我的代码才能生成我的
节点及其子节点
节点,这些节点的值
属性设置为每个相应站点名称的ID?为什么不这样做
$arr = array()
while ($row = $stmt->fetch()) {
$arr[$row['stationID']] = $row['stationName'];
}
您使用的是array_push,它不允许您为被推送的值指定一个键——您只需要获得下一个更高的可用索引。因此,不要使用数组函数,直接填充您的键/值对。不要调用json\u encode()
调用json\u encode
@Barmar的结果。如果我不这样做,我会得到以下错误:SyntaxError:json.parse:unexpected character
,它位于以下行:stationsList=json.parse({“6047”:“LA GRANDE Rivier A”})
。在调用json\u encode()的结果上不调用json\u encode()
1秒会使函数的输出
getStationList()`{“6047”:“LA GRANDE Rivier A”
而不是“{6047\”:[\“LA GRANDE Rivier A\”]}
啊,这是因为您调用的是json.json()
在Javascript中不必要。插入getStationList()
的结果会自动解析它,然后再次解析。去掉这些额外的编码和解析。我刚刚尝试了这个解决方案,它输出了相同的“{\'6047\:[\'LA GRANDE RIVIERE A\']”
就像我最初做的那样。当我调试代码时,问题似乎出在for(var x=0;x
中,它不用于创建
节点(我的组合框是空的)。如果你的键不连续,你不能使用for循环。你需要for(var I in arr)
loopIt现在在我修改(var x=0;xfor(var x在obj中)时起作用
,不幸的是,现在我在我所有的
组合框中都有额外的
节点,这些节点包含函数名,如值
属性,以及
和
标记之间的函数实现。有没有办法摆脱它们?这似乎是因为for去获取我的值在\u proto\u
以及数组的“常规”索引中(在调试时发现)。如果有帮助,显示此行为的组合框的类型为[object array],而正常的组合框(我尝试解决方案的station组合框)的类型为调试器中的[object object object]。jquery$。each()
也许更好,它知道跳过“内部”的东西。
function getStationList($regions)
{
$slt_nomStations = (isset($_GET["slt_nomStations"]) ? $_GET["slt_nomStations"] : 0);;
$db = ConnectionFactory::getFactory()->getConnection();
$stmt = $db->prepare("SELECT DISTINCT S.station_id, S.name, SA.sub_area_name FROM dev.Station AS S INNER JOIN dbo.SubArea AS SA ON S.sub_area_id = SA.sub_area_id INNER JOIN data.MonthlyNormalData as MND ON MND.station_id = S.station_id WHERE sub_area_name = '$regions[$slt_nomStations]' AND value IS NOT NULL ORDER BY S.name ASC");
$stmt->execute();
$stations = array();
$lastStationName = "";
while ($row = $stmt->fetch())
{
if ($lastStationName != $row['name'])
{
array_push($stations, $row['name']);
$lastStationName = $row['name'];
}
}
$newJSArray = json_encode($stations);
echo json_encode($newJSArray);
}
function getStationList($regions)
{
$slt_nomStations = (isset($_GET["slt_nomStations"]) ? $_GET["slt_nomStations"] : 0);;
$db = ConnectionFactory::getFactory()->getConnection();
$stmt = $db->prepare("SELECT DISTINCT S.station_id, S.name, SA.sub_area_name FROM dev.Station AS S INNER JOIN dbo.SubArea AS SA ON S.sub_area_id = SA.sub_area_id INNER JOIN data.MonthlyNormalData as MND ON MND.station_id = S.station_id WHERE sub_area_name = '$regions[$slt_nomStations]' AND value IS NOT NULL ORDER BY S.name ASC");
$stmt->execute();
$IDs = array();
$names = array();
$stations = array();
$lastStationName = "";
while ($row = $stmt->fetch())
{
if ($lastStationName != $row['name'])
{
array_push($names, $row['name']);
array_push($IDs, $row['station_id']);
$lastStationName = $row['name'];
}
}
$stations = array_fill_keys($IDs, $names);
$newJSArray = json_encode($stations);
echo json_encode($newJSArray);
}
$arr = array()
while ($row = $stmt->fetch()) {
$arr[$row['stationID']] = $row['stationName'];
}