web-dev-qa-db-fra.com

PHP comparer deux tableaux et obtenir les valeurs correspondantes et non la différence

J'essaie de comparer deux tableaux et d'obtenir uniquement les valeurs qui existent sur les deux tableaux mais, malheureusement, je ne trouve pas la bonne fonction de tableau à utiliser ...

J'ai trouvé la fonction array_diff(): http://php.net/manual/en/function.array-diff.php

Mais c'est pour la différence des deux tableaux.

Exemple:

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

Sortie attendue:

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

Simple, utilisez plutôt array_intersect() :

$result = array_intersect($array1, $array2);
83
Alix Axel

OK .. Nous avions besoin de comparer un nombre dynamique de noms de produits ...

Il y a probablement une meilleure façon ... mais cela fonctionne pour moi ...

... parce que .... Les chaînes ne sont que des tableaux de caractères ....:>}

//  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
2
Bill Warren