2014-01-09 2 views
1

Я использовал array_diff для сравнения с 2 строками, преобразованными в массивы, взорвался, он может сравнивать 2 массива одинаковой длины, как я сравниваю массивы разной длины?PHP array_diff для сравнения 2 массивов с разной длиной?

Ex.
Array1: the quisck browsn fosx
Array2: Быстро коричневая лиса
Works !!

Array1: quisck browsn
array2: быстрая коричневая лиса
не работает !! (лисица не было упомянуто)

<?php 
$str1 = "The quisck browsn"; 
$str2 = "The quick brown fox"; 
$tempArr; 
$var2; 
$ctr=0; 

echo "Array1:<br> $str1 <br><br>Array2:<br> $str2"; 

$strarr = (explode(" ",$str1)); 
echo("<br>"); 

$strarr2 = (explode(" ",$str2)); 
echo("<br>"); 

$result = array_diff($strarr,$strarr2); 
//print_r($result); 

if (count($result) > 0){ 
    echo "<br>Differences: | " ; 
    foreach ($result AS $result){ 
     echo $result." | "; 
    } 
} 
+0

'array_diff' может обрабатывать массивы разной длины просто отлично. – deceze

+0

сэр, если вы запустите мой код, вы увидите, что array_diff игнорирует последнее значение Array2, которое является лисой. Могу ли я спросить, могла ли какая-то часть моего кода быть причиной этого, если не array_diff? –

+0

Что вам может не хватать, так это то, что 'array_diff' *" возвращает массив, содержащий все записи __from 'array1'__, которые не присутствуют ни в одном из других массивов." * Http://php.net/array_diff – deceze

ответ

1

Попробуйте

$str1 = "The quisck browsn"; 
$str2 = "The quick brown fox"; 
$tempArr; 
$var2; 
$ctr=0; 

$strarr = (explode(" ",$str1)); 
echo("<br>"); 

$strarr2 = (explode(" ",$str2)); 
echo("<br>"); 

if(sizeof($strarr) > sizeof($strarr2)){ 
    $result = array_diff($strarr,$strarr2); 
}else{ 
    $result = array_diff($strarr2,$strarr); 
} 

выше будет вернуть разницу между размером массива, большим, чем lower.ie элемент присутствует в первом массиве, но не во втором.

Но если вы хотите полную разницу между 2 из них есть элемент первого массива не существует в 2 и наоборот вы можете сделать что-то, как

$fullDiff = array_merge(array_diff($strarr, $strarr2), array_diff($strarr2, $strarr)); 
+0

thnx mate Я дам ему шанс –

+0

Я только что обновил ответ. –

0

если ваш читать документацию array_diff(). Следует сказать о том, что

array_diff(array1,array2,array3...); 

Эта функция сравнивает значения двух (или более) массивов, и возвращает массив, содержащий записи array1, которые не присутствуют в массив2 или array3 и т.д.

Вы можете сначала найти массив с большим количеством элементов с использованием функции подсчета

, а затем передать аргумент, как показано ниже

 <?php 
     $str1 = "The quisck browsn"; 
     $str2 = "The quick brown fox"; 
     $tempArr; 
     $var2; 
     $ctr=0; 

     echo "Array1:<br> $str1 <br><br>Array2:<br> $str2"; 

     $strarr = (explode(" ",$str1)); 
     echo("<br>"); 

     $strarr2 = (explode(" ",$str2)); 
     echo("<br>"); 

     /* 
     Check Which array is bigger 
     */ 
     if(count($strarr)>count()$strarr2){ 

     $result = array_diff($strarr,$strarr2); 

     }else{ 

     $result = array_diff($strarr2,$strarr); 

     } 
    if (count($result) > 0){ 
     echo "<br>Differences: | " ; 
     foreach ($result AS $result){ 
     echo $result." | "; 
    } 
     } 
    ?> 
0
$str1 = "The quisck browsn"; 
$str2 = "The quick brown fox"; 
$tempArr; 
$var2; 
$ctr=0; 

echo "Array1:<br> {$str1} <br><br>Array2:<br> {$str2}"; 

$strarr = (explode(" ",$str2)); 
echo("<br>"); 

$strarr2 = (explode(" ",$str1)); 
echo("<br>"); 

$result = array_diff($strarr,$strarr2); 
//print_r($result); 

if (count($result) > 0){ 
    echo "<br>Differences: | " ; 
    foreach ($result AS $result){ 
     echo $result." | "; 
    } 
} 

Используйте это, поскольку он извлекает массив, содержащий все записи из $ str2 , которые не присутствуют ни в одном из других массивов.