Php 比较2个数组以匹配2个键
需要匹配2个多维数组中的2个键,如果找到,则返回第一个数组中的匹配项Php 比较2个数组以匹配2个键,php,arrays,compare,Php,Arrays,Compare,需要匹配2个多维数组中的2个键,如果找到,则返回第一个数组中的匹配项 array1 => $arr[1] = array('fruit' => 'apple', 'ver' => '1', 'color' => 'blue', 'name' =>'joe'); $arr[2] = array('fruit' => 'peach', 'ver' => '2', 'color' => 'red', 'name' =>'jane'); $arr[
array1 =>
$arr[1] = array('fruit' => 'apple', 'ver' => '1', 'color' => 'blue', 'name' =>'joe');
$arr[2] = array('fruit' => 'peach', 'ver' => '2', 'color' => 'red', 'name' =>'jane');
$arr[3] = array('fruit' => 'apple', 'ver' => '1', 'color' => 'red', 'name' =>'jack');
$arr[4] = array('fruit' => 'apple', 'ver' => '4', 'color' => 'grey', 'name' =>'joe');
array2 =>
$arr[1] = array('fruit' => 'apple', 'ver' => '4', 'color' => 'red', 'name' =>'joe');
$arr[2] = array('fruit' => 'apple', 'ver' => '4', 'color' => 'red', 'name' =>'jane');
我需要匹配2个键值,在本例中,只返回array1中匹配array2的匹配项。例如,键值就是键
水果
和名称
在上面的示例中,您可以看到此匹配对于array1
只应返回$arr1
和$arr4
,因为它们在array2
中匹配$arr[1]
。我只需要返回数组1的匹配项
这是一个例子,真实情况下,我不知道数组变量指示器或数量(可能每个都有几百个)
在此之后,$FOND将是一个新数组,其中包含所有子数组的副本,这些子数组具有匹配的FROUT/ver字段。这应该可以非常粗略地工作。然而,在实际解决方案中,我将其分为多种方法
$fruit_list = array( );
$fruit_list[ 1 ] = array( 'fruit' => 'apple', 'ver' => '1', 'color' => 'blue', 'name' => 'joe' );
$fruit_list[ 2 ] = array( 'fruit' => 'peach', 'ver' => '2', 'color' => 'red', 'name' => 'jane' );
$fruit_list[ 3 ] = array( 'fruit' => 'apple', 'ver' => '1', 'color' => 'red', 'name' => 'jack' );
$fruit_list[ 4 ] = array( 'fruit' => 'apple', 'ver' => '4', 'color' => 'grey', 'name' => 'joe' );
$fruits = array( );
$fruits[ 1 ] = array( 'fruit' => 'apple', 'ver' => '4', 'color' => 'red', 'name' => 'joe' );
$fruits[ 2 ] = array( 'fruit' => 'apple', 'ver' => '4', 'color' => 'red', 'name' => 'jane' );
$keys = array( );
foreach ( $fruits as $fruit ) {
foreach ( $fruit_list as $list_key => $list_item ) {
if ( in_array( $fruit[ 'fruit' ], $list_item ) && in_array( $fruit[ 'name' ], $list_item ) ) {
$keys[ ] = $list_key;
}
}
}
var_dump( $keys );
输出:
array(2) {
[0]=>
int(1)
[1]=>
int(4)
}
为了方便起见,使用PHP 5.3的匿名函数,您可以编写以下函数:
function compare_arrays($primary, $secondary, $matchKeys) {
$comparer = function($x, $y) use ($matchKeys) {
foreach ($matchKeys as $key) {
if ($x[$key] < $y[$key]) {
return -1;
}
else if($x[$key] > $y[$key]) {
return 1;
}
}
return 0;
};
return array_uintersect($primary, $secondary, $comparer);
}
前两个参数是数组。第三个参数是一个键数组,所有键都必须匹配才能将两个元素视为相等
当第一个数组中的元素被认为等于第二个数组中的任何元素时,第一个数组中的元素(
$primary
)被认为是匹配的compare_array
返回一个包含所有这些匹配项的数组。我猜您有$arr[1]、$arr[2]等。。它包含那些有意义的线条,而不是4个完全独立的数组?我没有看到任何多维数组你是说你不知道“键值”可能是什么?这些信息是如何提供的?我猜您有$arr[1]、$arr[2]等等。。包含那些果味线,而不是4个完全独立的数组?
是的,我知道键是什么(例如果味)。我编辑了OP以使其更有意义
function compare_arrays($primary, $secondary, $matchKeys) {
$comparer = function($x, $y) use ($matchKeys) {
foreach ($matchKeys as $key) {
if ($x[$key] < $y[$key]) {
return -1;
}
else if($x[$key] > $y[$key]) {
return 1;
}
}
return 0;
};
return array_uintersect($primary, $secondary, $comparer);
}
$arr1 = array();
$arr1[] = array('fruit' => 'apple', 'ver' => '1', 'color' => 'blue', 'name' =>'joe');
$arr1[] = array('fruit' => 'peach', 'ver' => '2', 'color' => 'red', 'name' =>'jane');
$arr1[] = array('fruit' => 'apple', 'ver' => '1', 'color' => 'red', 'name' =>'jack');
$arr1[] = array('fruit' => 'apple', 'ver' => '4', 'color' => 'grey', 'name' =>'joe');
$arr2 = array();
$arr2[] = array('fruit' => 'apple', 'ver' => '4', 'color' => 'red', 'name' =>'joe');
$arr2[] = array('fruit' => 'apple', 'ver' => '4', 'color' => 'red', 'name' =>'jane');
print_r(compare_arrays($arr1, $arr2, array('fruit', 'name')));