如何在jquery中转换php数组,如Literal表示法?

时间:2016-01-21 16:19:18

标签: javascript php jquery

我在php变量中获取数组,当我打印这个数组时,它看起来像:

Array
(
    [0]=>array(
                [lat]=>2.4354343
                [lng]=>6.43434343
                [address]=>united states
              )
    [1]=>array(
                [lat]=>5.4354343
                [lng]=>8.43434343
                [address]=>delhi
              )
    [2]=>array(
                [lat]=>2.4354343
                [lng]=>6.43434343
                [address]=>Mumbai
              )
    [3]=>array(
                [lat]=>2.4354343
                [lng]=>6.43434343
                [address]=>rajsthan
              )
)

现在我想在jquery中将它转换成这样:

var loc = [
    ['united states', 2.4354343, 6.43434343],
    ['delhi', 5.4354343, 8.43434343],
    ['Mumbai', 2.4354343, 6.43434343],
    ['rajsthan', 2.4354343, 6.43434343]
]

3 个答案:

答案 0 :(得分:0)

如果您确定始终拥有lat,lng和adress字段,则可以执行以下操作:

$array = array(
    array(
        "lat" => 2.4354343,
        "lng" => 6.43434343,
        "address" => "united states"
    ),
    array(
        "lat" => 5.4354343,
        "lng" => 8.43434343,
        "address" => "delhi"
    ),
    array(
        "lat" => 2.4354343,
        "lng" => 6.43434343,
        "address" => "Mumbai"
    ),
    array(
        "lat" => 2.4354343,
        "lng" => 6.43434343,
        "address" => "rajsthan"
    )
);
$loc = array();
foreach ($array as $values) {
    $loc[] = array(
        $values['address'],
        $values['lat'],
        $values['lng']
    );
}

print_r(json_encode($loc));

答案 1 :(得分:0)

从每个数组中提取值,然后可能是JSON编码?

$result = json_encode(array_map('array_values', $array));

答案 2 :(得分:0)

为什么你想要这样做是可疑的,因为它似乎是一项不必要的工作量,没有明显的好处,可能还有一些不好的副作用。例如,拥有一个密钥,您可以通过该密钥访问数组的每个元素中的addresslatlng,这将减轻重新排序要求,并避免{{{}的成本1}}完全查找。

在任何方面,要将此编码为JSON,你要求你需要通过O(n)运行数组中的每个元素,这可以用array_values之类的东西来完成。

但是,这并不能解决在每个子数组中首先期望array_map('array_values',$arr)部分的排序问题。要处理这个问题,你可以用address的组合替换地图,然后弹出数组中的最后一个元素,然后像这样返回联合数组......

array_values

最后$arr = array_map(function($v) { return array_values([array_pop($v)] + $v); }, $arr); 的输出应该能满足你的期望......

json_encode