我有一个由数据库查询构成的多维数组,就像那样:
Array
(
[0] => Array
(
[0] => -8.63296022565696
[x] => -8.63296022565696
[1] => 41.1584289069069
[y] => 41.1584289069069
[2] => 0
[seq] => 0
[3] => 2
[seq2] => 2
[4] => -8.63306031211831
[next_x] => -8.63306031211831
[5] => 41.1584543235506
[next_y] => 41.1584543235506
[6] => -8.64195115878864
[alert_x] => -8.64195115878864
[7] => 41.1599295066425
[alert_y] => 41.1599295066425
[8] => 54e728edafac1
[route] => 54e728edafac1
[9] => 54e728edafac1
[routeid] => 54e728edafac1
[10] => 2
[counttargetinter] => 2
[11] => passeio
[type] => passeio
[12] => 1355
[arcid] => 1355
)
重复所有值,因为有一个密钥编号和一个密钥名称。
示例:值'-8.63296022565696'
位于键"0"
和"X"
中。
如何删除重复的文件?
这就是我制作阵列的方式:
$query = "SELECT * FROM foo;";
$startRows = pg_query($connection, $query);
$startInfo = array();
while($list = pg_fetch_array($startRows)) {
$startInfo[] = $list;
}
答案 0 :(得分:1)
当然你不能搞乱生成JSON字符串来处理重复。您可以在编码之前在创建数组期间解决它。查看结构,这似乎是获取数字和列索引的问题。
由于您尚未发布任何与实际创建此JSON字符串相关的代码,因此请使用此基本知识来解决这些问题。
如果你打算删除那些数字索引,你可能需要使用数据库API的fetch_assoc()
种风格,这样你只能获得列名索引,而不是同时使用它们。
以下是这个想法:
$data = array(); // initialization of the container
while($row = your_fetch_assoc($result)) { // use assoc() instead to exclude those numeric indices
$data[] = $row;
}
echo json_encode($data);
根据您使用的API,如果是PDO
,请使用-->fetch(PDO::FETCH_ASSOC)
或->fetchAll(PDO::FETCH_ASSOC)
而不需要循环。如果是MySQLi
,则只需使用->fetch_assoc()
编辑:最后你的代码,因为我怀疑你正在使用_array()
函数,这会产生关联和数字索引行。
$query = "SELECT * FROM foo;";
$startRows = pg_query($connection, $query);
$startInfo = array();
while($list = pg_fetch_assoc($startRows)) {
$startInfo[] = $list;
}
使用pg_fetch_assoc()代替_array()
,这样您才能获得关联索引。
答案 1 :(得分:0)
试试这个:
foreach($walkroute as $routepoints){
foreach($routepoints as $key => $value){
if (is_int($key)){
unset($routepoints[$key]);
}
}
}
你必须修改它,因为我不知道你的阵列的结构和名称究竟是什么。
答案 2 :(得分:0)
喜欢Ghost:
您可以使用pg_fetch_row()获取数字索引,或使用pg_fetch_assoc()获取字段名称。
$query = "SELECT * FROM foo;";
$startRows = pg_query($connection, $query);
$startInfo = array();
while($list = pg_fetch_row($startRows)) {
$startInfo[] = $list;
}