删除两个使用数组函数不存在的键后比较2个数组

时间:2017-08-05 08:23:24

标签: php arrays

我有2个数组a和b,它们可能有也可能没有相似的值。

$a = array('id' => 1, 'name' => 'John Doe', 'age' => 35);
$b = array('name' => 'John Doe', 'age' => 35);

我需要使用数组函数本身检查两个数组中的键是否包含相同的值。请帮帮我。

注意:数组$ a始终是父数组。如果必须弹出任何键,则只能从$ a。

4 个答案:

答案 0 :(得分:3)

您可以根据array_intersect_assoc使用以下比较:

$b == array_intersect_assoc($a, $b)

当所有true键/值对出现在$b$a时,这将是false

答案 1 :(得分:0)

使用此代码:

使用: array_diff_key

删除重复密钥:

<?php
$a = array('id' => 1, 'name' => 'John Doe', 'age' => 35);
$b = array('name' => 'John Doe', 'age' => 35);
$c = array_diff_key($a, $b);
print_r($c); //Array ( [id] => 1 )
?>

获取重复密钥:

使用: array_intersect_key

<?php
function array_duplicate_keys() {
    $arrays = func_get_args();
    $count = count($arrays);
    $dupes = array();
    // Stick all your arrays in $arrays first, then:
    for ($i = 0; $i < $count; $i++) {
        for ($j = $i+1; $j < $count; $j++) {
            $dupes += array_intersect_key($arrays[$i], $arrays[$j]);
        }
    }
    return array_keys($dupes);
}
print_r(array_duplicate_keys($a, $b)); //Array ( [0] => name [1] => age )
?>

获取重复的密钥和值:

<?php
function get_keys_for_duplicate_values($my_arr, $clean = false) {
    if ($clean) {
        return array_unique($my_arr);
    }

    $dups = $new_arr = array();
    foreach ($my_arr as $key => $val) {
      if (!isset($new_arr[$val])) {
         $new_arr[$val] = $key;
      } else {
        if (isset($dups[$val])) {
           $dups[$val][] = $key;
        } else {
           $dups[$val] = array($key);
        }
      }
    }
    return $dups;
}
print_r(get_keys_for_duplicate_values($a, $b)); 
//Array ( [id] => 1 [name] => John Doe [age] => 35 )
?>

答案 2 :(得分:0)

如果$b $a中没有密钥,则可以使用array_intersect_key两次,参数顺序相反,并检查两个结果是否相同:

$ab = array_intersect_key($a, $b);
$ba = array_intersect_key($b, $a);
$allValuesEqual = ($ab == $ba);

答案 3 :(得分:0)

使用此:“它比较键和值”

$result=array_diff_assoc($a1,$a2); //<-Compare both key and value, gives new array

示例:

$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("a"=>"red","c"=>"blue","b"=>"pink");

$result=array_diff_assoc($a1,$a2);
print_r($result);

//result will be
Array ( [b] => green )