Nasıl dizileri karşılaştırmak ve fark ayıklamak için?

5 Cevap

Ben karşılaştırmak ve sonuçta kombine her şeyi ile bir tek dizi, having no duplicates ile rüzgar istiyorum iki diziler var. Birisi ben kullanmak hangi işlevi bana söyleyebilir misiniz? Bu biraz kafa karıştırıcı o kadar çok vardır.

$array1[]['name'] = 'Kim, Jones';
$array1[]['name'] = 'Jim, Miller';

dizi1 ben veritabanından gelen bir diziye eklenen istiyorum ki yerleşik bir dizidir. İkinci dizide anahtar da "isim" olarak adlandırılır. Teşekkürler.

EDIT:

Ben bu iki diziyi birleştirmek başardı ama hala çiftleri görebiliyorum.

Bu ilk dizi gibi görünüyor:

Array
(
    [0] => Array
        (
            [WNumber] => ADMIN
            [Name] => Tim, Cooley
            [Employer] => CalPERS
            [Student] => 1
            [Perm] => 1
            [QA] => 0
            [Supervisor] => 1
            [RQW] => 0
        )

Benim ikinci dizi böyle inşa edilir:

$add_names[]['Name']='Jim, Jones';

Ben sadece hayır çiftleri vardır ilk diziye $ add_names eklemek istiyorum.

5 Cevap

Onun "Set" sınıfında bu kolay bir dizi işleve sahiptir beri, CakePHP üzerinde satmak çeliyor. Senin sorunun iç içe bir dizi sonuçları olması. Basit bir "array_unique" iç içe geçmiş bir dizi çalışmaz.

Ben o eski moda şekilde yapmak istiyorum ...

$array1[]['name'] = 'Kim, Jones';
$array1[]['name'] = 'Jim, Miller';

$array2[]['name'] = 'Kim, Jones';
$array2[]['name'] = 'Jimbo, Miller';
$array2[]['name'] = 'Jim, Jones';

$new_array=array_merge($array1, $array2);
$out_array = array();
$key_array = array();
foreach($new_array as $i => $row) {
        if (empty($key_array[$row['name']])) {
                $out_array[] = $row;
        }
        $key_array[$row['name']] = 1;
}

print_r($out_array);

Bu kod benim için çalışıyor ...

PHP'nin array_diff () ne istiyorsun ki?

http://us.php.net/manual/en/function.array-diff.php

ya da daha fazla olası array_diff_assoc:

http://us.php.net/manual/en/function.array-diff-assoc.php

array_diff sizin için çalışır mı?

Description

array array_diff ( array $array1 , array $array2 [, array $ ... ] )
Compares array1 against array2 and returns the difference.

Eğer php aradığınızı işleme için doğrudan bir fonksiyonu yoktur, muhtemelen bunun için bir fonksiyon yazmak gerekir.

Ne senin soru anlaşılmaktadır size 2 diziler olması:

$a = array( array( 'name' => 'Omid' ), 12 );
$b = array( array( 'name' => 'testing' ) );

ve almak için onları birleştirmek istiyor

$merge = array( array( 'name' => 'testing' ), 12 );

Eğer istediğin buysa o zaman bu yorumun bakmak isteyebilirsiniz array merge recursive ki bu kod yol açar:

function array_merge_recursive_distinct ( array &$array1, array &$array2 )
{
  $merged = $array1;

  foreach ( $array2 as $key => &$value )
  {
    if ( is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] )     )
    {
      $merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value );
    }
    else
    {
      $merged [$key] = $value;
    }
  }

  return $merged;
}