我有2个数组a和b,它们可能有也可能没有相似的值。
$a = array('id' => 1, 'name' => 'John Doe', 'age' => 35);
$b = array('name' => 'John Doe', 'age' => 35);
我需要使用数组函数本身检查两个数组中的键是否包含相同的值。请帮帮我。
注意:数组$ a始终是父数组。如果必须弹出任何键,则只能从$ a。
答案 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 )
?>
获取重复密钥:
<?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 )