I'm trying to compare two arrays and get only the values that exist on both arrays but, unfortunately, I can't find the right array function to use...
我试图比较两个数组,只获得两个数组中存在的值,但不幸的是,我找不到正确的数组函数使用...
I found the array_diff()
function: http://php.net/manual/en/function.array-diff.php
我找到了array_diff()函数:http://php.net/manual/en/function.array-diff.php
But it's for the difference of the both arrays.
但这是两个阵列的差异。
Example:
例:
$array1 = array("**alpha**","omega","**bravo**","**charlie**","**delta**","**foxfrot**");
$array2 = array("**alpha**","gamma","**bravo**","x-ray","**charlie**","**delta**","halo","eagle","**foxfrot**");
Expected Output:
预期产出:
$result = array("**alpha**","**bravo**","**charlie**","**delta**","**foxfrot**");
2 个解决方案
#1
78
Simple, use array_intersect()
instead:
很简单,使用array_intersect()代替:
$result = array_intersect($array1, $array2);
#2
2
OK.. We needed to compare a dynamic number of product names...
好的..我们需要比较动态数量的产品名称......
There's probably a better way... but this works for me...
可能有更好的方法......但这对我有用......
... because....Strings are just Arrays of characters.... :>}
...因为....字符串只是字符数组......:>}
// 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
#1
78
Simple, use array_intersect()
instead:
很简单,使用array_intersect()代替:
$result = array_intersect($array1, $array2);
#2
2
OK.. We needed to compare a dynamic number of product names...
好的..我们需要比较动态数量的产品名称......
There's probably a better way... but this works for me...
可能有更好的方法......但这对我有用......
... because....Strings are just Arrays of characters.... :>}
...因为....字符串只是字符数组......:>}
// 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