php 为每个键重复的数组值
php array value repeated for each key
我有一个由数据库查询组成的多维数组,就像这样:
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;
}
当然不能乱用生成的JSON字符串来处理dups。您可以在编码之前创建数组本身的过程中解决它。从结构上看,这似乎是同时获取数字和列索引的问题。
由于您还没有发布任何与实际创建此 JSON 字符串相关的代码,因此只需使用这个关于如何摆脱它们的基本思路。
如果您打算删除这些数字索引,您可能需要使用数据库的 fetch_assoc()
风格 API,这样,您将只会获得列名索引而不是同时拥有它们。
想法是这样的:
$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()
,这样您将只获得关联索引。
试试这个:
foreach($walkroute as $routepoints){
foreach($routepoints as $key => $value){
if (is_int($key)){
unset($routepoints[$key]);
}
}
}
你必须修改它,因为我不知道你的数组的结构和名称实际上是什么。
喜欢幽灵:
您可以使用pg_fetch_row() to get numeric indices or pg_fetch_assoc()获取字段名称。
$query = "SELECT * FROM foo;";
$startRows = pg_query($connection, $query);
$startInfo = array();
while($list = pg_fetch_row($startRows)) {
$startInfo[] = $list;
}
我有一个由数据库查询组成的多维数组,就像这样:
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;
}
当然不能乱用生成的JSON字符串来处理dups。您可以在编码之前创建数组本身的过程中解决它。从结构上看,这似乎是同时获取数字和列索引的问题。
由于您还没有发布任何与实际创建此 JSON 字符串相关的代码,因此只需使用这个关于如何摆脱它们的基本思路。
如果您打算删除这些数字索引,您可能需要使用数据库的 fetch_assoc()
风格 API,这样,您将只会获得列名索引而不是同时拥有它们。
想法是这样的:
$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()
,这样您将只获得关联索引。
试试这个:
foreach($walkroute as $routepoints){
foreach($routepoints as $key => $value){
if (is_int($key)){
unset($routepoints[$key]);
}
}
}
你必须修改它,因为我不知道你的数组的结构和名称实际上是什么。
喜欢幽灵:
您可以使用pg_fetch_row() to get numeric indices or pg_fetch_assoc()获取字段名称。
$query = "SELECT * FROM foo;";
$startRows = pg_query($connection, $query);
$startInfo = array();
while($list = pg_fetch_row($startRows)) {
$startInfo[] = $list;
}