Php 多维数组的相交与差分
我有两个数组Php 多维数组的相交与差分,php,arrays,multidimensional-array,intersect,Php,Arrays,Multidimensional Array,Intersect,我有两个数组 $paternalSiblings = fname => John lname => Doe gender => M birth_year => 1988 fname => Sophie lname => Ellison gender => F birth_year => 1990 $maternalSiblings = fname => John lname => Smith g
$paternalSiblings = fname => John lname => Doe gender => M birth_year => 1988
fname => Sophie lname => Ellison gender => F birth_year => 1990
$maternalSiblings = fname => John lname => Smith gender => M birth_year => 1997
fname => John lname => Doe gender => M birth_year => 1988
阵列的输出:
Array ( [0] => Array ( [fname] => John [lname] => Doe [birth_year] => 1988[gender] => Male [fname] => Sophie [lname] => Ellison [birth_year] => 1990 [death_date] => [gender] => Female ) )
Array ( [0] => Array ( [fname] => John [lname] => Doe [birth_year] => 1988[gender] => Male [fname] => John [lname] => Smith [birth_year] => 1997 [death_date] => [gender] => Male ) )
$fullSiblings = $this->arrayIntersect( $paternalSiblings , $maternalSiblings );
<?php
function arrayIntersect( $primary_array, $secondary_array ) {
if ( !is_array( $primary_array ) || !is_array( $secondary_array ) ) {
return false;
}
if ( !empty( $primary_array ) ) {
foreach( $primary_array as $key => $value ) {
if ( !isset( $secondary_array[$key] ) ) {
unset( $primary_array[$key] );
} else {
if ( serialize( $secondary_array[$key] ) != serialize( $value ) ) {
unset( $primary_array[$key] );
}
}
}
return $primary_array;
} else {
return array();
}
}
?>
Array([0]=>Array([fname]=>John[lname]=>Doe[出生年份]=>1988[性别]=>Male[fname]=>Sophie[lname]=>Ellison[出生年份]=>1990[死亡日期]=>
数组([0]=>Array([fname]=>John[lname]=>Doe[出生年份]=>1988年[性别]=>Male[fname]=>John[lname]=>Smith[出生年份]=>1997年[死亡日期]=>
$FULLSINDES=$this->arrayIntersect($PATERNALSINDES,$MATERNALSINDES);
这个函数不起作用。如何相交和区分阵列?我注意到内置函数array_intersect_assoc()和array_diff_assoc()不适用于多维数组。实现目标的最佳方法是什么?您至少需要一个固定值来识别每一行,并检查其他值的差异
$first = array(
"uniqueId1" => array("name" => "Ignacio", "email" => "user@server.com"),
"uniqueId2" => array("name" => "John", "email" => "jh@server.com")
);
$second = array(
"uniqueId1" => array("name" => "Ignacio", "email" => "other@server.com"),
"uniqueId2" => array("name" => "Luis", "email" => "jh@server.com")
);
您可以比较并得出以下方面的差异:
foreach($first as $keyRow => $firstRow) {
if(isset($second[$keyRow])) { //The first row exists in second array, so, I will check it
foreach($firstRow as $key => $value) {
if($second[$keyRow][$key] != $value) {
echo "For row: ".$keyRow.", ".$second[$keyRow][$key]." is not equal to: ".$value."<br />";
}
}
}
}
你能发布这两个数组的
print\u r()
输出,并发布你到目前为止尝试过的内容吗?这里是矩阵。这看起来像是线性代数的工作@阿马尔穆拉里更新了我的问题。谢谢。工作很好。
For row: uniqueId1, other@server.com is't equal to: user@server.com
For row: uniqueId2, Luis is't equal to: John