有多少我从这个数组中删除重复项?

时间:2014-02-20 15:18:04

标签: php

首先我要说的是,我已经调查过其他帖子但未能完成我的需求。我使用过array_unique($array)但重复项不会被丢弃。这是使用var_dump:

的数组视图
{
  [0]=>
  string(12) "44.94.192.40"
}
array(1) {
  [0]=>
  string(12) "44.94.192.41"
}
array(1) {
  [0]=>
  string(9) "44.94.1.1"
}
array(1) {
  [0]=>
  string(9) "44.94.1.1"
}
array(1) {
  [0]=>
  string(13) "44.96.253.100"
}

“44.94.1.1”是一个副本,我希望删除,但我不能。这与我的数组结构有关吗?

4 个答案:

答案 0 :(得分:0)

根据您的评论进行编辑:

来自array_unique()上的documentation

  

当且仅当(string) $elem1 === (string) $elem2时,才认为两个元素相等。用文字表示:当字符串表示相同时。

因此,每个值都是数组的事实是干扰。

尝试创建仅包含字符串值的数组:

$new_array = array();
foreach ($array as $value) {
    $new_array[] = $value[0];
}
$new_array = array_unique($new_array);

答案 1 :(得分:0)

你可以使用foreach循环

$array = array(
  array("44.94.192.40"),
  array("44.94.192.41"),
  array("44.94.1.1"),
  array("44.94.1.1"),
  array("44.96.253.100"),
);
$temp_arr=array();
foreach($array as $elementKey => $element)
{
  foreach($element as $valueKey => $value)
  {
    if(in_array($value,$temp_arr)) unset($array[$elementKey]);
    else $temp_arr[]=$value;
  }
}
print_r($array);

输出将是:

Array ( [0] => Array ( [0] => 44.94.192.40 ) [1] => Array ( [0] => 44.94.192.41 ) [2] => Array ( [0] => 44.94.1.1 ) [4] => Array ( [0] => 44.96.253.100 ) )

答案 2 :(得分:0)

您可以展平数组并使数组唯一,或者通过引用外部数组执行array_map

<?php
$data = array(
  array("44.94.192.40"),
  array("44.94.192.41"),
  array("44.94.1.1"),
  array("44.94.1.1"),
  array("44.96.253.100"),
);

$visited = array();

array_map(function($v) use ( &$visited ){
   if(array_search( $v[0], $visited ) === false){
     $visited[] = $v[0];
   };
},$data);

var_dump($visited);

array(4) {
  [0]=>
  string(12) "44.94.192.40"
  [1]=>
  string(12) "44.94.192.41"
  [2]=>
  string(9) "44.94.1.1"
  [3]=>
  string(13) "44.96.253.100"
}

答案 3 :(得分:0)

您可以在用户评论中找到多种方法从array_unique的php doc页面上的多维数组中删除重复项

http://us3.php.net/array_unique

Orel还提到了一个重复的问题,一目了然也包含了做同样的功能 How to remove duplicate values from an array in PHP

为了简单起见,我已经为你选了一个,但根据你想要的确切内容,我链接的php页面上有很多不同的风格

foreach ($arrAddressList AS $key => $arrAddress) {
    $arrAddressList[$key] = serialize($arrAddress);
}
$arrAddressList = array_unique($arrAdressList);
foreach ($arrAddressList AS $key => $strAddress) {
    $arrAddressList[$key] = unserialize($strAddress);
}