我正在编写一个脚本来比较游戏中一个玩家与另一个玩家的成就。在每个数组中,id 和时间戳将在某些条目上匹配。我包含了 2 个独立数组的开头之一的示例:
Array
(
[0] => Array
(
[id] => 8213
[timestamp] => 1384420404000
[url] => http://www.wowhead.com/achievement=8213&who=Azramon&when=1384420404000
[name] => Friends In Places Higher Yet
)
[1] => Array
(
[id] => 6460
[timestamp] => 1384156380000
[url] => http://www.wowhead.com/achievement=6460&who=Azramon&when=1384156380000
[name] => Hydrophobia
)
我想找到 id 和时间戳匹配的所有数组项。我已经调查了array_intersect但我认为这不是我正在寻找的,因为它只会在条目相同时找到项目。任何帮助非常感谢。
array_intersect_assoc
函数。
尝试这样的事情:
<?php
$key_match = Array();
//Loop first array
foreach($array as $key => $element){
//Compare to second array
if($element == $array2[$key]){
//Store matching keys
$key_match[] = $key;
}
}
?>
$key_match 将是一个包含所有匹配键的数组。
(我在工作,没有时间测试代码)
希望对你有帮助
编辑:下面是完全工作的示例:
<?php
$a1["t"] = "123";
$a1["b"] = "124";
$a1["3"] = "125";
$a2["t"] = "123";
$a2["b"] = "124";
$a2["3"] = "115";
$key_match = Array();
//Loop first array
foreach($a1 as $key => $element){
//Compare to second array
if($element == $a2[$key]){
//Store matching keys
$key_match[] = $key;
}
}
var_dump($key_match);
?>
如果你想继续探索数组回调函数,看看array_uintersect。 这就像array_intersect只是您指定了一个用于比较的函数。 这意味着您可以编写自己的代码。
不幸的是,您需要实现一个基于小于、等于、大于返回 -1、0 或 1 的函数,因此您需要更多代码。 但我怀疑这将是完成您正在寻找的事情的最有效方式。
function compareArrays( $compareArray1, $compareArray2 ) {
if ( $compareArray1['id'] == $compareArray2['id'] && $compareArray1['timestamp'] == $compareArray2['timestamp'] ) {
return 0;
}
if ( $compareArray1['id'] < $compareArray2['id'] ) {
return -1;
}
if ( $compareArray1['id'] > $compareArray2['id'] ) {
return 1;
}
if ( $compareArray1['timestamp'] < $compareArray2['timestamp'] ) {
return -1;
}
if ( $compareArray1['timestamp'] > $compareArray2['timestamp'] ) {
return 1;
}
}
var_dump( array_uintersect( $array1, $array2, "compareArrays") );