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;
}