2016-01-13 3 views
1

У меня есть код для получения адреса, который разделен пробелом, а затем получения сведений об этом адресе, поэтому каждый раз, когда результат sql хранится в массиве «resultArray», и этот результат переносится в другой массив «returnArray», который затем отображается в формате json.I хочу удалить дубликат area_id в returnArray, поэтому я использовал «array_unique», но он не работает. Пожалуйста, дайте некоторое предложение.применение array_unique

Пример кода:

<?php 
    include_once 'main.php'; 
    $dac = new Main(); 
    $add = $_POST['address']; 
    $noLines = sizeof($add); 
    $resultArray=array(); 
    $returnArray=array(); 
    $returnArrayMain=array(); 

    while ($noLines>0) 
    { 
     $resultArray=array(); 
     $result = $dac->area_detail($add[$noLines-1]); 
     $count=mysql_num_rows($result); 

    while($row = mysql_fetch_assoc($result)) 
    { 
      $resultArray[]=array('area_id' => $row['area_id'],'area_name' =>  $row['area_name'],'area_GISlat'=>$row['area_GISlat'],'area_GISlon'=>$row['area_GISlon']); 
    } 
      array_push($returnArray, $resultArray) ; 
      $noLines = $noLines-1; 

    } 

     $returnArrayMain = array_unique($returnArray); 
     echo json_encode($returnArrayMain); 
?> 
+0

Пожалуйста, посмотрите: http://stackoverflow.com/a/2442315/3647441 –

+0

Я попробовал метод, который они упоминали, но он не работает, потому что он находится внутри двух массивов. – user092

ответ

0

Вот решение с тестирования associative array:

// this is testing array as you are using: 
$resultArray = array( 
    array(
    'area_id' => 12, 
    'area_name' => 'test', 
    'area_GISlat'=>'test2', 
    'area_GISlon'=>'test3'), 
    array(
    'area_id' => 11, 
    'area_name' => 'test', 
    'area_GISlat'=>'test2', 
    'area_GISlon'=>'test3'), 
    array(
    'area_id' => 12, 
    'area_name' => 'test', 
    'area_GISlat'=>'test2', 
    'area_GISlon'=>'test3') 
    ); 

// take a temporary arry 
$temporaryArr = array(); 

// initialize key's array 
$arrayKey = array(); 

foreach ($resultArray as $key => $values) { 
    if (!in_array($values, $temporaryArr)) { 
     $temporaryArr[] = $values; // store values in temporary array 
     $arrayKey[$key] = true; // store all keys in another array 
    } 
} 

// now use array_intersect_key function for intersect both array. 
$requiredArr = array_intersect_key($resultArray, $arrayKey); 

echo "<pre>"; 
print_r($requiredArr); 

Результат:

Array 
(
    [0] => Array 
     (
      [area_id] => 12 
      [area_name] => test 
      [area_GISlat] => test2 
      [area_GISlon] => test3 
     ) 

    [1] => Array 
     (
      [area_id] => 11 
      [area_name] => test 
      [area_GISlat] => test2 
      [area_GISlon] => test3 
     )  
) 

Удалены дубликаты arrays.

От PHP Manual:

array_intersect_key - Вычисляет пересечение массивов, используя ключи для сравнения

примечание стороны:

добавить также отчеты об ошибках в верхней части файла (s) сразу после вашего открытия <?php tag

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
0

попробовать это ..

$returnArrayMain = uniqueAssocArray($returnArray, 'area_id'); 
echo json_encode($returnArrayMain); 

function uniqueAssocArray($array, $uniqueKey) { 
    if (!is_array($array)) { 
     return array(); 
    } 
    $uniqueKeys = array(); 
    foreach ($array as $key => $item) { 
     $groupBy=$item[$uniqueKey]; 
     if (isset($uniqueKeys[$groupBy])) 
     { 
      //compare $item with $uniqueKeys[$groupBy] and decide if you 
      //want to use the new item 
      $replace= ... 
     } 
     else 
     { 
      $replace=true; 
     } 
     if ($replace) $uniqueKeys[$groupBy] = $item; 
    } 
    return $uniqueKeys; 
} 
+1

Что такое 'uniqueAssocArray()'? – Darren

+0

sry забыл дать функцию .. Я добавил функцию в свой ответ –

0

попробовать этот

$returnArrayMain = array_map("unserialize", array_unique(array_map("serialize", $resultArray))); 
Смежные вопросы