应用array_unique

时间:2016-01-13 06:03:56

标签: php sql arrays

我有代码来获取由空格分隔的地址,然后获取有关该地址的区域详细信息,以便每次sql结果存储在数组“resultArray”中,并将结果推送到另一个数组“returnArray”,然后显示以json的格式。我想在returnArray中删除重复的area_id所以我使用了“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);
 ?>

3 个答案:

答案 0 :(得分: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 :(得分:0)

试试这个

$returnArrayMain = array_map("unserialize", array_unique(array_map("serialize", $resultArray)));

答案 2 :(得分: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手册:

array_intersect_key - 使用密钥计算数组的交集

旁注:

在您打开<?php代码后立即将错误报告添加到文件顶部

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