我正在尝试使用JSON在主机和我的网页之间传输数组。在主机上,我有一个php脚本,它从mysql表中读取多行并从中创建一个数组。
$query="select ID,val,size from db;";
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result)) {
$idx= (int) $row['ID'];
$data[$idx]['val']=$row['val'];
$data[$idx]['size']=$row['size'];
}
echo json_encode($data);
通常,ID在例如0和99之间线性递增。在这种情况下,json_encoded输出是一个数组(并且将被解释为javascript中的数组...如果我执行array.length ,我得到100作为答案)....
有时,表中缺少一些行(可能没有idx = 40的行)...在这种情况下,数组是json_encoded作为对象的集合。在javascript中,如果我尝试查看array.length,我会得到一个未定义的结果。我想强制数据数组被解释为索引数组,缺少行的值为null / 0。是否有捷径可寻?看起来json_encode函数有一个强制编码作为关联数组的选项,但不是相反。
THX。
答案 0 :(得分:1)
$query="select ID,val,size from db;";
$result=mysql_query($query);
$maxId = -1;
$defaultValue = null;
while ($row=mysql_fetch_assoc($result)) {
$idx= (int) $row['ID'];
if($maxId < $idx)
$maxId = $idx;
$data[$idx]['val']=$row['val'];
$data[$idx]['size']=$row['size'];
}
for($i=0;$i<$maxId;$i++)
if(!isset($data[$i))
$data[$i] = $defaultValue;
echo json_encode($data);
答案 1 :(得分:1)
我将$ data定义为完整数组,然后替换其中的元素。
$data = array_fill($starting_index, 100, null);
$query="select ID,val,size from db;";
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result)) {
$idx= (int) $row['ID'];
$data[$idx]['val']=$row['val'];
$data[$idx]['size']=$row['size'];
}
echo json_encode($data);
答案 2 :(得分:0)
这很烦人,但那是你的Javascript。我通常通过在数据结构中添加另一个级别来解决这个问题:
$data['size'] = count($myarray);
$data['array'] = $myarray;
echo json_encode($data);
通过这种方式,您可以获得“免费”的长度,而无需进行任何客户端循环/计数。