需要匹配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匹配的匹配项。例如,键值是键
fruit
和name
。
在上面的示例中,您可以看到此匹配应仅返回$arr1
的{{1}}和$arr4
,因为它们与array1
中的$arr[1]
匹配。我只需要为array1返回匹配项。
这是一个例子,真实情况我不知道数组varibale指标或数量(可能每个数百)。
答案 0 :(得分:1)
$array = (
0 => array('fruit' => 'apple' etc....
etc...
);
$find_these = array('fruit' => 'apple', 'ver' => 4, 'color' => red, etc...);
$fruit = $find_these['apple'];
$ver = $find_these['ver'];
$found = array();
foreach($array as $key => $subarray) {
if (($subarray['fruit'] == $fruit) && ($subarray['ver'] == $ver))
$found[$key] = $subarray;
}
}
在此之后,$ found将是一个新数组,其中包含具有匹配的fruit / ver字段的所有子数组的副本。
答案 1 :(得分:0)
这应该非常粗略地起作用。然而,我会在真正的解决方案中分成多种方法。
$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)
}
答案 2 :(得分:0)
为方便起见,使用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);
}
可以这样使用:
$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')));
前两个参数是你的数组。第三个参数是一个键数组,它们必须匹配两个元素才能被认为是相等的。
当第一个数组中的元素被认为等于第二个数组的任何元素时,第一个数组中的元素($primary
)被认为是匹配的。 compare_array
返回包含所有这些匹配项的数组。