在PHP中比较同一数组中的元素的最佳方法是什么,这样如果在数组A中有两个具有相同值的元素,我可以传递一个函数作为参数来做某事吗?
答案 0 :(得分:5)
您可以将array_count_values
和in_array
功能用作:
if(in_array(2,array_count_values($array)) {
// do something
}
答案 1 :(得分:2)
如果要查找数组中重复的所有值,可以执行以下操作:
// Array to search:
$array = array('one', 'two', 'three', 'one');
// Array to search:
// $array = array('a'=>'one', 'b'=>'two', 'c'=>'three', 'd'=>'one');
// Temp array so we don't find the same key multipule times:
$temp = array();
// Iterate through the array:
foreach ($array as $key)
{
// Check the key hasn't already been found:
if (!in_array($key, $temp))
{
// Get an array of all the positions of the key:
$keys = array_keys($array, $key);
// Check if there is more than one position:
if (count($keys)>1)
{
// Add the key to the temp array so its not found again:
$temp[] = $key;
// Do something...
echo 'Found: "'.$key.'" '.count($keys).' times at position: ';
for($a=0;$a<count($keys);$a++)
{
echo $keys[$a].',';
}
}
}
}
以上的输出是:
发现:“一次”位置2次: 0,3,
如果你的数组有自定义键(如在注释数组中那样),那么输出将是:
发现:“一”在位置上2次:a,d,
答案 2 :(得分:1)
我假设您不想合并到数组,然后删除重复项。
$array1 = array('a', 'b', 'c');
$array2 = array(1, 2, 3, 'a');
// array_merge() merges the arrays and array_unique() remove duplicates
var_dump(array_unique(array_merge($array1, $array2)));
// output: array('a', 'b', 'c', 1, 2, 3)
答案 3 :(得分:1)
使用array_udiff或类似的(如果您希望能够修改值,则在回调中使用引用参数):
$array1 = array('foo', 'bar', 'baz');
$array2 = array('foo', 'baz');
$result = array_udiff($array1, $array2, function(&$a, &$b) {
if ($a == $b) {
$a = $b = 'same!';
return 0;
}
return $a > $b ? 1 : -1;
});
print_r($array1); // array('same!', 'bar', 'same!')
print_r($array2); // array('same!', 'same!')