in_array'in ama iğne dizidir, ne alternatif bunun için

4 Cevap php

Ben 2 diziler, değer veritabanından yüklenir var, aşağıda bir örnek:

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);

Ne yapmak istiyorum $arr1 $arr2 var all the values eğer kontrol etmektir. : Yukarıdaki örnek, bir TRUE süre olmalıdır

$arr3 = array(1,2,4,5,6,7);

$arr1 ile $arr3, bir FALSE döndürür karşılaştırma.

Ben sadece bir diziye tek değerini kontrol etmek gerekir çünkü Normalde in_array kullanın. Ancak bu durumda, in_array kullanılamaz. Ben en az döndürülerek denetimi yapmak için basit bir yolu olup olmadığını görmek istiyorum.

Açıklama için GÜNCELLEMEYİ.

İlk dizi benzersiz değerler içeren bir dizi olacak. İkinci dizi yinelenen değerleri içerebilir. Onlar hem işlemeden önce bir dizi garantilidir.

4 Cevap

Sen array_intersect kullanın veya array_diff yapabilirsiniz:

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);

if ( $arr1 == array_intersect($arr1, $arr2) ) {
    // All elements of arr1 are in arr2
}

Size (sizin durum gibi görünüyor) kesişme sonucunu kullanmak gerekmez Ancak, bu array_diff kullanmak verimli daha fazla yer ve zaman:

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$diff = array_diff($arr1, $arr2);

if ( empty($diff) ) {
    // All elements of arr1 are in arr2
}

Siz iki dizi arasındaki farkı bulmak için array_diff() işlevini kullanabilirsiniz deneyebilirsiniz, bu size yardımcı olabilir. Ne demek açıklığa kavuşturmak için, ilk dizideki tüm değerleri ikinci dizide olmalı düşünüyorum, ama başka bir yol etrafında.

Benim durumda ben kimlikleri bir çift önce veya işlenmiş olup olmadığını kontrol etmek gerekli. Yani basit bir array_diff() benim için işe yaramadı.

Bunun yerine kimlikleri alfabetik olarak sıralanmış ve İn_Array'in ile kullandım tuşları oluşturulan:

<?php
$pairs = array();
// ...
$pair = array($currentId, $id);
sort($pair);
$pair = implode('-', $pair);
if (in_array($pair, $pairs)) {
    continue;
}
$pairs[$pair] = $pair;

Bu muhtemelen hiç de optimum bir çözüm değil ama ben sadece bir kez idam edilecek bir kirli senaryo için gerekli.