2017-08-03 52 views
0

我寫了這個代碼:PHP Array對JavaScript的長度

$userAddresses = $database->getUsers("SELECT * FROM Users"); 

$address = array(); 
foreach($userAddresses as $user){ 
    array_push($address, array("address"=> $user['address'], 
           "zipcode" => $user['zipcode'])); 
} 
$locations = array(
      "locations" => $address 
); 

$jsonLocations = json_encode($locations); 

此代碼返回此JSON對象:

{"locations":[ 
      {"address":"Sneekermeer 25","zipcode":"2993 RL"}, 
      {"address":"Boeier 13","zipcode":"2992 AK"}]} 

我想這個數組中的JavaScript的長度。在地址變量

var address = '<?php echo $jsonLocations ?>'; 

之後,我叫console.log(address.length);檢查長度,但一些它如何計算所有的字符(108我認爲),並返回爲長度:所以我這樣做。 address.locations.length也不起作用。

有人可以幫我嗎?

+1

你是什麼意思的長度?它應該顯示什麼? –

+1

請注意您的地址行上的引號。這是一個字符串。 –

回答

2

您可以使用JSON.parse()

var address = JSON.parse('<?php echo $jsonLocations ?>'); 

console.log(address.length); // will give you length; 
+0

如果你走這條路線,你必須對它進行雙重編碼,請參閱@ Geoffrey的帖子。 – georg

-1

我曾嘗試下面及其工作

var address = '{"locations":[{"address":"Sneekermeer 25","zipcode":"2993 RL"},{"address":"Boeier 13","zipcode":"2992 AK"}]}'; 
address = JSON.parse(address); 
console.log(address.locations.length); 
0

您可以去掉引號var address = '<?php echo $jsonLocations ?>';(即var address = <?php echo $jsonLocations ?>;),或使用JSON.parse解析它作爲一個字符串到一個對象。

1

那是因爲字符串需要解碼到一個對象。您可以通過以下兩種方式之一來完

非推薦:

var address = <?= $jsonLocations ?>;

或者更準確,更安全:

var address = JSON.parse('<?= addslashes(json_encode($jsonLocations)) ?>');

不要忘記調用addslashes,以防止你的陣列中的任何單引號斷裂的JavaScript串。

+0

第一種方法有什麼問題?看起來更好(也更安全)給我。 – georg

+0

@georg它可以用來注入Javascript,而不僅僅是一個對象,其中'JSON.parse'方法不會執行任何Javascript,而只是加載對象。這就是它爲什麼存在的原因。 – Geoffrey

+0

啊,我明白了,好點。 – georg