在PHP中动态比较这两个数组



如何将这两个php数组与最大相似值进行比较,并从array_2中获得与array_1匹配最大的键索引?我不能使用传统的if-else条件来做到这一点,因为涉及到多个条件,有什么快速而稳健的方法吗?

$array_1 = array(
'key_1'=> 'value_1',
'key_2'=> 'value_2',
'key_3'=> 'value_3'
);
$array_2 = array(
[1] => array(
'key_1'=> 'value_1',
'key_2'=> 'value_2',
'key_3'=> 'value_3',
'key_4'=> 'value_4',
'key_5'=> 'value_5'
),
[2] => array(
'key_1'=> 'value_1',
'key_2'=> 'value_2',
'key_3'=> 'value_3',
'key_4'=> 'value_4',
'key_5'=> 'value_5'
),
[3] => array(
'key_1'=> 'value_1',
'key_2'=> 'value_2',
'key_3'=> 'value_3',
'key_4'=> 'value_4',
'key_5'=> 'value_5'
)
);

更新:

这些是我正在处理的实际数组,我想从array_2中获得与array_1 匹配的最大值的URL

Array_1:
Array
(
[country] => IN
[os] => WINDOWS
[device] => DESKTOP
[bit] => 64
[browser] => CHROME
)
or 
Array
(
[country] => IN
[os] => WINDOWS
[device] => DESKTOP
[bit] => 64
[browser] => FIREFOX
)
Array_2:
Array
(
[1] => Array
(
[country] => IN
[browser] => NONE
[os] => WINDOWS
[device] => DESKTOP
[bit] => 64
[url] => url-1
)
[2] => Array
(
[country] => IN
[browser] => FIREFOX
[os] => WINDOWS
[device] => DESKTOP
[bit] => 64
[url] => url-2
)
[3] => Array
(
[country] => IN
[browser] => CHROME
[os] => MACOS
[device] => NONE
[bit] => NONE
[url] => url-3
)
) 

更新2:

$user_data = array();
$user_data['country'] = get_user_cc();
$user_data['os'] = get_user_os();
$user_data['device'] = get_user_device();
$user_data['bit'] = get_user_osbit();
$user_data['browser'] = get_user_browser();
$saved_data = get_post_meta($post->ID, 'redirects', true);
if (!empty($saved_data)) {
foreach ($saved_data as $data) {
$new_data = $data;
unset($new_data['url']);
if($new_data['browser'] === 'NONE') {
$user_data['browser'] = 'NONE';
}
if($new_data['os'] === 'NONE') {
$user_data['os'] = 'NONE';
}
if($new_data['country'] === 'NONE') {
$user_data['country'] = 'NONE';
}
if($new_data['device'] === 'NONE') {
$user_data['device'] = 'NONE';
}
if($new_data['bit'] === 'NONE') {
$user_data['bit'] = 'NONE';
}  

$match_count = count(array_intersect_assoc($user_data, $new_data));
echo '<pre>';
print_r($match_count);
echo '</pre>';

}
}

在循环过程中不应该更改$user_data,因为这会干扰以后的迭代。制作$user_data的副本并更新。

您需要检查$match_count是否高于当前最大值。如果是,请更新最大值并保存当前URL。

$max_match = -1;
foreach ($saved_data as $data) {
$temp_data = $user_data;
$save_url = $data['url'];
unset($temp_data['url']);
if($data['browser'] === 'NONE') {
$temp_data['browser'] = 'NONE';
}
if($data['os'] === 'NONE') {
$temp_data['os'] = 'NONE';
}
if($data['country'] === 'NONE') {
$temp_data['country'] = 'NONE';
}
if($data['device'] === 'NONE') {
$temp_data['device'] = 'NONE';
}
if($data['bit'] === 'NONE') {
$temp_data['bit'] = 'NONE';
}  

$match_count = count(array_intersect_assoc($user_data, $temp_data));
if ($match_count > $max_match) {
$max_match = $match_count;
$url = $save_url;
}

}
echo '<pre>';
print_r($url);
echo '</pre>';

最新更新