javascript中的php array concat

时间:2019-02-19 13:32:29

标签: javascript php

我有一个由:分隔的数字字符串,例如"20:1:21,21:0:21",此php代码使用,爆炸了字符串,并将结果数组连接为一个关联数组,例如:

$in = "20:1:21,21:0:21";
$list=explode(",",$in);
$results = array( 0 => array(), 1 => array());
foreach ($list as $item) {
        $item=explode(":",$item);
        if (sizeof($item)==3) {
            $results[$item[1]][$item[0]] += $item[2];
        }
    }

在这里注意+=运算符。

的期望值

array(2) {
  [0]=>
  array(1) {
    [21]=>
    int(21)
  }
  [1]=>
  array(1) {
    [20]=>
    int(21)
  }
}

[{"21":21},{"20":21}]作为json输出。

在javascript中,就像

    var results = { 0: [], 1: [] };
    for (var key in list) {
        var item = list[key];
        item=item.split(":");
        if (item.length == 3) {
            if(!results[item[1]]) results[item[1]]={};
            results[item[1]][item[0]]=item[2];
        }
    }

但是它会在附加正确的值之前创建null值的列表,为什么?

2 个答案:

答案 0 :(得分:3)

您的JS代码似乎期望输入array,但是您的输入是字符串。另外,您将result定义为普通对象,但实际上需要一个数组...

这是您可以在JavaScript中完成的方法。

var input = "20:1:21,21:0:21";

var result = input.split(",")
     .map(s => s.split(":"))
     .reduce((acc, [a,b,c]) => (acc[b] = {[a]: c}, acc), []);

console.log(result);

答案 1 :(得分:1)

或者您可以使用正则表达式来完成它:

var string = '20:1:21,21:0:21';
var regex = /(\d+):(\d+):(\d+)/g;
var match;
var result = {};

while (match = regex.exec(string)) {
    result[match[2]] = {[match[1]]: match[3]};
}

console.log(result);