我正在尝试从 2d php 字符串数组中获取输入并将 arr[i][1] 中的值(其中 i 可以被视为矩阵中的行和 1 作为列(转换为整数,如下所示:
JavaScript 函数:
var _input = <? php echo json_encode($output); ?> ; //2D String
var _sro = []; //string
var _src = []; //string
var _sru = []; //string
var aL = _input.length;
for (var i = 0; i < aL; i++) {
_sro.push(_input[i][0]); //string
_src.push(_input[i][1]); //string
_sru.push(_input[i][2]); //string
}
alert(_src.toString()); //result = 1,1,2,9,6,1,24...
alert(typeof(_src).toString()); //res = string
var _lb = new Array(); //empty
var _dt = new Array(); //empty
for (var i = 0; i < aL; i++) {
_dt.push(parseInt(_src[i])); //convert to int and push to arr
}
alert(_dt.toString()); //result = NaN,NaN,NaN,NaN.....
alert(typeof(_dt).toString()); //res = string
_lb = _sro;
我遇到的问题是_dt每个值的最终输出是 NaN,这意味着它没有得到适当的转换。为了解决这个问题,我尝试了以下方法:
- 使用 parseInt
- 使用 Number((
- 使用"+"运算符
- 同时使用 parseInt 和 Number((
例如:
for (var i = 0; i < aL; i++) {
_dt.push(Number(parseInt(_src[i]))); //convert to int and push to arr
}
所有这些都失败了。我真的很迷茫,经过 2 天的谷歌搜索,我已经没有想法了,也许有智慧的人能够提供帮助,提前感谢您。
编辑:
PHP函数:
下面的函数生成传递给 JS 的 PHP 数组:
//set error reporting
error_reporting(E_ALL & ~E_NOTICE);
//set variables
$result = array();
$output = array();
//read in csv file
foreach(file("1OnScreen.csv") as $key => $str) {
if ($key == 0)
continue; // skip first line
$values = str_getcsv($str, "'t", '', '');
$result[] = $values;
}
$output = $result;
CSV 数据
CSV 文件包含以下数据,分隔符为 ''t:
Owner Count Unassigned Other
AA1 1 0 1
AD 1 0 1
AR 2 0 2
BW 9 0 9
CM 6 0 6
CT 1 0 1
DB 24 0 24
EU 8 0 8
GM 5 0 5
GO 21 0 21
JF 1 0 1
JW 2 0 2
NH 10 0 10
RB 2 0 2
SPC 4 0 4
SP 2 0 2
TC 2 0 2
TG 1 0 1
VS 4 0 4
JS 格式的 JSON 输出_input
的输出,正如我在运行时看到的那样alert(_input)
我认为新行开头的逗号可能会影响转换并使其失败,但我不知道如何解决这个问题。
AA1,1,0,1
,AD,1,0,1
,AR,2,0,2
,BW,9,0,9
,CM,6,0,6
,CT,1,0,1
,DB,24,0,24
,EU,8,0,8
,GM,5,0,5
,GO,21,0,21
,JF,1,0,1
,JW,2,0,2
,NH,10,0,10
,RB,2,0,2
,SPC,4,0,4
,SP,2,0,2
,TC,2,0,2
,TG,1,0,1
,VS,4,0,4
转换失败,因为从 PHP 脚本传递的 JSON 字符串中的某些特殊字符和"如果第一个字符无法转换为数字,parseInt(( 返回 NaN"。W3C 源
为了解决转换失败或防止它发生,使用正则表达式会派上用场(此处提供正则表达式教程(将导致替换除 1-9 以外的所有字符(根据此问题(,例如: /[^1-9 ]/g
尝试将字符串转换为数字时,使完整代码如下所示:
var _srOwner = <? php echo json_encode($sro_o); ?> ;
var _srCount = <? php echo json_encode($src_o); ?> ;
var _srUnassigned = <? php echo json_encode($sru_o); ?> ;
var _srC = [];
var _srU = [];
var aL = _srCount.length;
var cs = "";
var us = "";
var csi = "";
var usi = "";
var cn = 0;
var un = 0;
for (var i = 0; i < aL; i++) {
cs = String(_srCount[i]); //string
us = String(_srUnassigned[i]); //string
csi = cs.replace(/[^1-9]/g, ""); //string
usi = us.replace(/[^1-9]/g, ""); //string
cn = parseInt(csi);
un = Number(usi);
_srC.push(cn);
_srU.push(un);
};
如果同时使用parseInt()
和Number()
的转换成功,您可以使用此问题作为选择哪一个的指导。
特别感谢@dirluca对这个问题的贡献和很好的指导。