Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较2个数组以匹配2个键_Php_Arrays_Compare - Fatal编程技术网

Php 比较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[

需要匹配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[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')));