2016-07-19 8 views
-1

У меня есть два массива, первые из которых:Проверьте массив содержит значение другого массива в том же порядке

[4, 6, 2, 7, 5, 1] 

и второе существо:

[2, 7, 5] 

Как я могу определить, является ли первым массив содержит ТАКИЕ значения (и в SAME заказать) второго массива. В этом случае функция вернет TRUE, потому что последовательность 2, 7, 5 фактически присутствует в первом массиве. Он вернет FALSE за 2, 5, 7. Значения существуют в первом массиве, но не в том точном порядке.

Есть ли для этого существующая функция PHP? Если нет, как я должен это достичь?

ответ

1

Для общего случая содержимого массива:

$ar1 = [2, 4, 6, 2, 4, 7, 5, 1,]; 
$ar2 = [2, 7, 5]; 

// Find point where sub-array can start 
$keys = array_keys($ar1, $ar2[0]); 
foreach($keys as $k) 
    // Check that sub-array is the same as the second array 
    if(array_slice($ar1, $k, count($ar2)) == $ar2) 
     { echo "Wow!"; break; } 
+0

Спасибо за вашу помощь, он работает! –

+0

Добро пожаловать – splash58

1

Если массив просто цифры, я хотел бы предложить трюк:

$a1 = [4, 6, 2, 7, 5, 1]; 
$a2 = [2, 7, 5]; 
// convert both arrays to strings, 
// add `,` in the beginning and end, see @splash58 comment 
$a1_str = ',' . implode(',', $a1) . ','; 
$a2_str = ',' . implode(',', $a2) . ','; 
// check with strpos: 
echo strpos($a1_str, $a2_str) !== false? 'Eq' : 'Not eq'; 
+0

Я понимаю, что это работает, но не там лучший способ добиться этого? Поскольку преобразование массивов в строки не выглядит совершенно правильно ... –

+1

@u_mulder Оберните обе строки запятыми, чтобы избежать сравнения 2,7,5 с 22,7,55. +1, потому что я думал так же – splash58

Смежные вопросы