向PHP数组中的特定键位置添加值
Adding values to a specific key position in PHP array
我正在使用一个库,除其他参数外,它接受一个名称数组,并创建一个<select>
组合框,其中包含以该数组中命名的<option>
元素。为<option>
节点的value
属性赋取取名称所在索引的值。因此,例如,如果数组的索引0包含"foo",那么它将创建如下所示的标记:<option value="0">foo</option>
。作为参考,下面是该库的代码:
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");
}
}
这里是我调用它的地方:
myDiv = document.getElementById('tmp_stationDiv');
var stationsList = new Array();
stationsList = JSON.parse(<?php getStationList($regions); ?>);
myDiv.innerHTML = generateSelect("1",stationsList,
"slt_idStations",message["txt_choose_station"][lang],
'','show','blockDiv');
这是函数getStationList()
的代码:
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);
}
现在这工作得很好。例如,getStationList()
的输出是"['"LA GRANDE RIVIERE A'"]"
,然后我使用JSON.parse()
将其转换为javascript数组。
不幸的是,与<option>
节点相关联的value
将是0,1,2,…, n,其中n为站点数- 1。我想将站点的名称与其站点ID(我从数据库中恢复)关联起来,因此与<option>
节点关联的value
将是这些ID。要做到这一点,我想我需要在相应ID的索引处推送站点的名称。我已经尝试过这样做与以下修改getStationList()
:
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);
}
不幸的是,这不起作用,因为getStationList()
函数的输出现在是这样的:"{'"6047'":['"LA GRANDE RIVIERE A'"]}"
。那么,我必须如何修改我的代码才能生成<select>
节点,其子<option>
节点的value
属性设置为每个相应站点名称的ID ?
为什么不像
$arr = array()
while ($row = $stmt->fetch()) {
$arr[$row['stationID']] = $row['stationName'];
}
您正在使用array_push,它不允许您为推送的值指定键-您只会获得下一个更高的可用索引。因此,不要使用array_*()函数,直接在键/值对中填充即可。
- jquery试图按名称获取按钮位置
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 循环比赛位置算法
- es6 相当于下划线查找位置
- jQuery循环在特定位置暂停
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 自定义函数中的光标位置
- 安卓平台上的QWebView HTML5地理位置
- DIV并排,位置不正确
- 使用jQuery更改元素的顶部位置
- 在谷歌地图上绘制位置数据库
- 跟踪jqplot垂直折线图的鼠标位置
- 设置画布渲染器的x和y位置
- 固定位置菜单时滚动,直到它击中一个相对容器的底部
- 根据页面的位置突出显示文本中的字符
- 传单缩放控制位置错误
- 如何将返回的值应用于多个不同位置的多个选择器
- 随机播放数组,因此没有两个键位于同一位置