为每个键重复php数组值

时间:2015-02-20 12:20:07

标签: php arrays multidimensional-array

我有一个由数据库查询构成的多维数组,就像那样:

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

3 个答案:

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