değerlerden biri dizi başka bir dizi olup olmadığını görmek için bir yerli php fonksiyonu var?

3 Cevap

Strpos ile döngü () daha iyi bir yöntem var mı?

Kısmi maçları değil, bir İn_Array'in () yöntemini yazmanız için arıyorum değil.

örnek samanlık ve iğne ve istenen dönüş:

$needles[0] = 'naan bread';
$needles[1] = 'cheesestrings';
$needles[2] = 'risotto';
$needles[3] = 'cake';

$haystack[0] = 'bread';
$haystack[1] = 'wine';
$haystack[2] = 'soup';
$haystack[3] = 'cheese';

//desired output - but what's the best method of getting this array?
$matches[0] = 'bread';
$matches[1] = 'cheese';

yani:

magic_function ($ samanlık,% $ iğneler%)!

3 Cevap

I naan bread samanlıkta değil, ne olduğu, çünkü senin soru $haystack ve $needle kafa karıştırıcı olduğunu düşünüyorum cheesestring. İstediğiniz çıkışı cheese yerine cheesestring arıyoruz göstermektedir. Bunun için, şu işe:

function in_array_multi($haystack, $needles)
{
    $matches = array();
    $haystack = implode('|', $haystack);
    foreach($needles as $needle) {
        if(strpos($haystack, $needle) !== FALSE) {
            $matches[] = $needle;
        }
    }
    return $matches;
}

Size verilen samanlık ve iğnelerin bu iki kat daha hızlı bir regex çözüm olarak gerçekleştirir. Olsa params farklı sayıda değişebilir.

Ben kendi rulo gerekecek sanırım. Kullanıcı array_intersect() alternatif uygulamaları bir dizi sağlamak için Yorumlar Katkıda (gibi this one). Sadece == strstr() karşı eşleşen yerine olurdu.

$data[0] = 'naan bread';
$data[1] = 'cheesestrings';
$data[2] = 'risotto';
$data[3] = 'cake';

$search[0] = 'bread';
$search[1] = 'wine';
$search[2] = 'soup';
$search[3] = 'cheese';

preg_match_all(
    '~' . implode('|', $search) . '~',
    implode("\x00", $data),
    $matches
);

print_r($matches[0]); 

// [0] => bread
// [1] => cheese

Bize real sorun hakkında daha söylersen daha iyi cevap alırsınız.