我想你正在寻找这个;)
$result = array_map(function($a, $b) {
return [$a, $b];
}, ['foo', 'bar'], ['baz', 'qux']);
var_dump($result);
这将输出
array(2) {
[0]=>
array(2) {
[0]=>
string(3) "foo"
[1]=>
string(3) "baz"
}
[1]=>
array(2) {
[0]=>
string(3) "bar"
[1]=>
string(3) "qux"
}
}
更新:它使用该方法返回您想要的结果array_uintersect
。这不是最有效的方法,也没有使用不同的数据集等进行测试,但应该可以。
$entities = [
[
'id' => 1,
'timestamp' => 1234
],
[
'id' => 2,
'timestamp' => 12345
],
[
'id' => 3,
'timestamp' => 123456
],
[
'id' => 8,
'timestamp' => 123456
],
[
'id' => 10,
'timestamp' => 123456
],
[
'id' => 11,
'timestamp' => 123456
],
[
'id' => 12,
'timestamp' => 123456
]
];
$identities = [1, 11, 2, 8, 10];
$result = array_uintersect($entities, $identities, function($a, $b) {
// Both array skip
if (is_array($a) && is_array($b)) {
if ($a['id'] > $b['id']) {
return 1;
}
return -1;
}
// Both int skip
if (is_int($a) && is_int($b)) {
if ($a > $b) {
return 1;
}
return -1;
}
// $a is array
if (is_array($a)) {
if ($a['id'] == $b) {
return 0;
}
elseif ($a['id'] > $b) {
return 1;
}
return -1;
}
// $b is array
if($b['id'] == $a) {
return 0;
}
if($a > $b['id']) {
return 1;
}
return -1;
});
var_dump($result);
和结果
array(5) {
[0]=>
array(2) {
["id"]=>
int(1)
["timestamp"]=>
int(1234)
}
[1]=>
array(2) {
["id"]=>
int(2)
["timestamp"]=>
int(12345)
}
[3]=>
array(2) {
["id"]=>
int(8)
["timestamp"]=>
int(123456)
}
[4]=>
array(2) {
["id"]=>
int(10)
["timestamp"]=>
int(123456)
}
[5]=>
array(2) {
["id"]=>
int(11)
["timestamp"]=>
int(123456)
}
}