Php 应用数组_-unique

Php 应用数组_-unique,php,sql,arrays,Php,Sql,Arrays,我有代码来获取由空格分隔的地址,然后获取关于该地址的区域详细信息,因此每次sql结果存储在数组“resultArray”中,该结果被推送到另一个数组“returnArray”,然后以json格式显示。我想删除returnArray中重复的区域id,所以我使用了“array\u unique”但它不起作用。请给出一些建议 示例代码: <?php include_once 'main.php'; $dac = new Main(); $add = $_POST[

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

试试这个

$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;
}
试试这个

$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;
}
试试这个

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

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

下面是一个测试关联数组的解决方案:

// 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);
已删除重复的
阵列

来自PHP手册:

error_reporting(E_ALL); 
ini_set('display_errors', 1);
-使用用于比较的键计算数组的交集

旁注:

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

在打开
之后,还要将错误报告添加到文件顶部,这是一个测试
关联数组的解决方案:

// 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);
已删除重复的
阵列

来自PHP手册:

error_reporting(E_ALL); 
ini_set('display_errors', 1);
-使用用于比较的键计算数组的交集

旁注:

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

另外,在打开
后立即将错误报告添加到文件顶部请查看:我尝试了他们提到的方法,但由于它位于两个数组内而无效。请查看:我尝试了他们提到的方法,但由于它位于两个数组内而无效。sry忘记提供函数。。我在回答中加了函数,我忘了加函数。。我在回答中增加了函数