gpt4 book ai didi

javascript - 将值添加到 PHP 数组中的特定键位置

转载 作者:行者123 更新时间:2023-12-03 12:09:10 24 4
gpt4 key购买 nike

我使用的库除其他参数外,还采用名称数组,并创建一个 <select> 组合框,其中包含以该数组中的内容命名的 <option> 元素。它还将获取名称的索引值分配给 value 节点的 <option> 属性。因此,例如,如果数组的索引 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'>&nbsp;</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 数组。

不幸的是,与 value 节点关联的 <option> 将为 0, 1, 2, ..., n,其中 n 是站的数量 - 1。我想将站的名称与其站 ID 相关联(我从数据库中恢复)因此与 value 节点关联的 <option> 将是这些 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_*() 函数,而直接填充键/值对。

关于javascript - 将值添加到 PHP 数组中的特定键位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com