2015-02-20 7 views
0

У меня есть многомерный массив, изготовленный из запроса к базе данных и как то:PHP значения массива повторяется для каждого ключа

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

Вы пробовали что-нибудь? – Rizier123

+0

Я ищу способ удаления всех значений с помощью целых ключей. – pdcc

+0

Согласно мне его JSON –

ответ

0

Как Дух:

Вы можете использовать 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; 
} 
1

Конечно, вы не можете возиться с генерировать строки JSON, чтобы иметь дело с дубликатами. Вы решаете его при создании самого массива перед кодированием. Если посмотреть на структуру, это, по-видимому, проблема получения индексов чисел и столбцов.

Поскольку вы не размещаете никаких кодов, связанных с созданием этой строки 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()

EDIT: Наконец ваши коды, как я подозревал, что вы используете _array() функцию, которая приводит ассоциативные и числовые индексированные строки.

$query = "SELECT * FROM foo;"; 
$startRows = pg_query($connection, $query); 
$startInfo = array(); 
while($list = pg_fetch_assoc($startRows)) { 
    $startInfo[] = $list; 
} 

Использование pg_fetch_assoc() вместо _array(), так что вы получите только индексы ассоциативные.

+0

Спасибо. Я отредактировал мой вопрос. Вы можете увидеть, как я делаю массив – pdcc

+0

@pdcc Да, мое подозрение верное, вы используете '_array()', используйте '_assoc()' вместо этого, проверьте мой пересмотренный ответ выше. – Ghost

+0

@Ghost Вы почти догадались с помощью '* _assoc()' только 'pg_ *', о котором вы не догадались: D – Rizier123

0

Попробуйте это:

foreach($walkroute as $routepoints){ 
    foreach($routepoints as $key => $value){ 
     if (is_int($key)){ 
     unset($routepoints[$key]); 
     } 
    } 
} 

Вы должны изменить его из-за того, что я не знаю, какова структура и названия вашего массива на самом деле.

Смежные вопросы