2012-04-02 164 views
23

Estoy tratando de comparar dos matrices y obtener solo los valores que existen en ambas matrices pero, desafortunadamente, no puedo encontrar la función de matriz correcta para usar. .PHP comparar dos matrices y obtener los valores coincidentes no la diferencia

me encontré con la función array_diff(): http://php.net/manual/en/function.array-diff.php

pero es para la diferencia de las matrices de ambos.

Ejemplo:

$array1 = array("**alpha**","omega","**bravo**","**charlie**","**delta**","**foxfrot**"); 
$array2 = array("**alpha**","gamma","**bravo**","x-ray","**charlie**","**delta**","halo","eagle","**foxfrot**"); 

Resultados esperados:

$result = array("**alpha**","**bravo**","**charlie**","**delta**","**foxfrot**"); 

Respuesta

77

simple, utilice array_intersect() lugar:

$result = array_intersect($array1, $array2); 
+2

woahhh !!! ¡¡¡muchas gracias señor!!! ahora puedo continuar con mi trabajo ... –

+1

100+ @ Axix Axel me haces el día – chhameed

+1

Muchas gracias ... – KNKM

2

OK .. Se necesita comparar un num dinámico ero de nombres de productos ...

Probablemente hay una manera mejor ... pero esto funciona para mí ...

... porque .... Las cadenas son sólo arreglos de caracteres ....: >}

// Compare Strings ... Return Matching Text and Differences with Product IDs... 

// From MySql... 
$productID1 = 'abc123'; 
$productName1 = "EcoPlus Premio Jet 600"; 

$productID2 = 'xyz789'; 
$productName2 = "EcoPlus Premio Jet 800"; 

$ProductNames = array(
    $productID1 => $productName1, 
    $productID2 => $productName2 
); 


function compareNames($ProductNames){ 

    // Convert NameStrings to Arrays...  
    foreach($ProductNames as $id => $product_name){ 
     $Package1[$id] = explode(" ",$product_name);  
    } 

    // Get Matching Text... 
    $Matching = call_user_func_array('array_intersect', $Package1); 
    $MatchingText = implode(" ",$Matching); 

    // Get Different Text... 
    foreach($Package1 as $id => $product_name_chunks){ 
     $Package2 = array($product_name_chunks,$Matching); 
     $diff = call_user_func_array('array_diff', $Package2); 
     $DifferentText[$id] = trim(implode(" ", $diff)); 
    } 

    $results[$MatchingText] = $DifferentText;    
    return $results;  
} 

$Results = compareNames($ProductNames); 

print_r($Results); 

// Gives us this... 
[EcoPlus Premio Jet] 
     [abc123] => 600 
     [xyz789] => 800 
Cuestiones relacionadas