PHP bir çok-boyutlu bir dizi yinelenen değerleri kaldırmak için nasıl

6 Cevap php

PHP nasıl çok boyutlu bir dizi yinelenen değerleri kaldırmak olabilir?

Örnek bir dizi:

Array
(
    [0] => Array
	(
	    [0] => abc
	    [1] => def
	)

    [1] => Array
	(
	    [0] => ghi
	    [1] => jkl
	)

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

    [3] => Array
	(
	    [0] => abc
	    [1] => def
	)

    [4] => Array
	(
	    [0] => ghi
	    [1] => jkl
	)

    [5] => Array
	(
	    [0] => mno
	    [1] => pql
	)

)

6 Cevap

Burada başka, başka bir yoludur. Hiç ara değişkenler kaydedilir.

Biz örtüşen sorgu çeşitli sonuçlar de-çoğaltmak için bu kullanılır.

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

array_unique() belgelere kullanıcı yorumları bu birçok çözüm var. İşte bunlardan biri:

kenrbnsn at rbnsn dot com
27-Sep-2005 12:09

Yine çok demensioned diziler için başka array_unique. Ben sadece iki-demensioned diziler bu test ettik, ama muhtemelen daha jeneralize veya özyineleme kullanmak için yapılabilir.

Bu fonksiyon işi yapmak için serialize, array_unique ve unserialize işlevlerini kullanır.

    function multi_unique($array) {
        foreach ($array as $k=>$na)
            $new[$k] = serialize($na);
        $uniq = array_unique($new);
        foreach($uniq as $k=>$ser)
            $new1[$k] = unserialize($ser);
        return ($new1);
    }

Bu http://ca3.php.net/manual/en/function.array-unique.php#57202 değil.

Başka bir yolu. De anahtarlarını korumak olacaktır.

function array_unique_multidimensional($input)
{
    $serialized = array_map('serialize', $input);
    $unique = array_unique($serialized);
    return array_intersect_key($input, $unique);
}

5.2.9 beri bunu gibi array_unique() if you use the SORT_REGULAR bayrağını kullanabilirsiniz:

array_unique($array, SORT_REGULAR);

Bu $a == $b kullanılmaya başlandı sanki işlevi durum için mükemmel olan, eşitlik unsurları karşılaştırmak yapar.

Output

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => def
        )

    [1] => Array
        (
            [0] => ghi
            [1] => jkl
        )

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

)

Ben benzer bir sorun vardı ama ben bunun için% 100 çalışan bir çözüm bulundu.

<?php

$arr="";

$arr[0]['id']=0;

$arr[0]['titel']="ABC";

$arr[1]['id']=1;

$arr[1]['titel']="DEF";

$arr[2]['id']=2;

$arr[2]['titel']="ABC";

$arr[3]['id']=3;

$arr[3]['titel']="XYZ";



echo "<pre>";

print_r($arr);

echo "unique*********************<br/>";

print_r(super_unique($arr,'titel'));



function super_unique($array,$key)

{

   $temp_array = array();

   foreach ($array as &$v) {

       if (!isset($temp_array[$v[$key]]))

       $temp_array[$v[$key]] =& $v;

   }

   $array = array_values($temp_array);

   return $array;



}



?>

Bir çözüm okumak kolay, muhtemelen en verimli:

function arrayUnique($myArray){
    if(!is_array($myArray))
        return $myArray;

    foreach ($myArray as &$myvalue){
        $myvalue=serialize($myvalue);
    }

    $myArray=array_unique($myArray);

    foreach ($myArray as &$myvalue){
        $myvalue=unserialize($myvalue);
    }

    return $myArray;

}