2011-03-22 6 views
11

Her biri herhangi bir sayıda öğeye sahip olabilen, kullanıcı tarafından sağlanan bir parametreye bağlı olarak sayılan rasgele sayıdaki PHP dizilerini kesiştirmeye çalışıyorum.PHP'de bilinmeyen sayıda diziyi kesiştirin

Örneğin

: Dizi1 (1, 2, 3, 4, 5) array2 (2, 4, 6, 8, 9, 23) array3 (a, b, 3, c, f) . .. arrayN (x1, x2, x3, x4, x5 ... xn) array_intersect yana

Bu yoluma etrafında çalışmak kesişir ve sahip dizilerin biridir dizisi inşa edemez, params bir listesini alır . Bu çözümü denedim: http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays ama bu çalışmadı, bir hata bildirildi, array_intersect 2 veya daha fazla param gerektirir.

Bu yönteme, mümkün olduğunca basit bir şekilde nasıl yaklaşılacağı konusunda bir fikri var mı?

cevap

38

sonra eval kullanmayın call_user_func_array()

$wrkArray = array($userArray1, 
        $userArray2, 
        $userArray3 
       ); 
$result = call_user_func_array('array_intersect',$wrkArray); 
+0

Zaten benim orijinal Söz konusu linke belirtildiği gibi, bu çalıştı

Teşekkür yardımcı olur. Bu aldığım hatadır: "Uyarı: array_intersect() [function.array-intersect]: en az 2 parametre gereklidir, 1 ..." – Swader

+0

Aptal ben, call_user_func "_array" kısmını kaçırdım! Teşekkür ederim! – Swader

+1

@swader - yapmak için kolay bir hatadır ... Kendinizi çok fazla tekmelemeyin :-) –

4

Kullanıcılara bu şekilde diziler her eklemek yeni bir boş dizi oluştur()!

deneyin bu

$isect = array(); 
for ($i = 1; $i <= $N; $i++) { 
    $isect = array_intersect($isect, ${'array'.$i}); 
} 

veya

$arrays = array() 
for ($i = 1; $i <= $N; $i++) { 
    $arrays[] = ${'array'.$i}; 
} 
$isect = call_user_func_array('array_intersect', $arrays); 
+1

Lütfen ** $ {'dizi' kullanın. $ i} ** gerçekten böyle giderseniz. – eisberg

+1

@eisberg: thx, updated – rik

+0

İlk seçenek çalışmıyor, çünkü sonuç boş bir diziye başlatılıyor, aşağıdaki kesişimlerin sonucu her zaman boş bir dizi olacaktır. –

1
$arrays = [ 
    $userArray1, 
    $userArray2, 
    $userArray3 
]; 
$result = array_intersect(...$arrays); 
0

çok çok geç benim Yanıt göndererek, ancak her ihtimale karşı, bana yardımcı oluyor kod küçük bir parça paylaşmak istiyorum am Birilerinin bu soru için ihtiyacı var.

print_r(array_intersect(array_merge($array1,$array2,...),$intersectionArr); 

Bu