比较2个数组并删除相似的值

时间:2015-07-30 04:34:07

标签: php mysql sql arrays comparison

我有2个阵列

第一个是这样的

$sql1 = "SELECT userid FROM interest where interest='".$interest."' and userid!='".$myuserid."'";
    $result1 = mysqli_query($conn, $sql1);
    if (mysqli_num_rows($result1) > 0) 
        {
            while($row1 = mysqli_fetch_assoc($result1)) 
                {
                    $userid = $row1["userid"];
                    $user[] = array($userid);                       
                }
            echo "<pre>";
                print_r ($user);
            echo "</pre>";  
        }

它的o / p就像这样

 Array
    (
        [0] => Array
            (
                [0] => 8
            )

        [1] => Array
            (
                [0] => 9
            )

        [2] => Array
            (
                [0] => 2
            )
        [3] => Array
            (
                [0] => 1
            )   

    )

第二个是这样的

 $sql = "SELECT * FROM block where blockedby='".$myuserid."'";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) 
        {
            while($row = mysqli_fetch_assoc($result)) 
                {
                    $blockeduser=$row["blockeduser"];
                    $block[] = array($blockeduser,$myuserid);
                }  

                echo "<pre>";
                    print_r ($block);
                echo "</pre>";

        }

它的o / p就像这样

Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 2
            )

    )

我希望比较这两个数组并删除结果数组中的相似值..我应该得到的数组作为最终结果应该是这样的

Array
    (
        [0] => Array
            (
                [0] => 8
            )

        [1] => Array
            (
                [0] => 9
            )

    )

我试过

 $unique=array_unique( array_merge($block, $user) );
    $block=array_diff($unique, $block);
    print_r($block);

但我得到了这个结果

 Array
    (
    )

任何人都可以告诉我如何实现这一结果

2 个答案:

答案 0 :(得分:0)

Array_unique无法使用多维数组。我们可以通过array_filter实现它的功能

$values = array();

$new = array_filter(array_merge($block, $user), 
          function($i) use(&$values) { 
             if( !in_array($i[0], $values)) 
                { $values[] =  $i[0]; return true;} 
             return false; });

答案 1 :(得分:0)

由于array_unique无法使用多维数组。

可能有更好的方法......但这对我来说可以从多维数据中删除类似的值...

$array1 = array(
 array("a" => "green"),
 array("b" => "brown"), 
 array("c" => "blue")
);
$array2 = array(
 array("a" => "red"),
 array("b" => "yellow"), 
 array("c" => "blue")
 );

首先使用 array_merge_recursive 合并数组,因为这些是多维数组

$array = array_merge_recursive($array1, $array2); 

然后以递归方式从数组中获取所有值

$values="";

function get_values($ inarray){       全球$值;

  foreach ($inarray as $key => $value) {

        if(is_array($value)){
            get_values($value);
        }else{
          $values.=",".$value;
            echo $key."=>".$value."<br/>";
        }

  }
 return $values;
}



$values=get_values($array);

//返回值 //,绿色,棕色,蓝色,红色,黄色,蓝色

 $values=ltrim($values,","); 

//在ltrim返回值之后 //绿色,棕色,蓝色,红色,黄色,蓝色

 $valuesArr=explode(",",$values);

这里使用explode将所有值作为ondimensional数组 现在我们可以使用array_unique函数来消除数组之间的类似值。

$uniqueValue=array_unique($valuesArr);
print_r($uniqueValue);

不重复任何值结果

Array

(     [0] =&gt;绿色     [1] =&gt;棕色     [2] =&gt;蓝色     [3] =&gt;红色     [4] =&gt;黄色   )