我正在运行两个查询,它们返回类似于下面所示的数组:
第一:
array(
array(
'id' => 1
),
array(
'id' => 2
),
array(
'id' => 3
),
array(
'id' => 4
),
)
第二
array(
array(
'id' => 4
),
array(
'id' => 5
),
array(
'id' => 6
),
array(
'id' => 7
),
)
但我想以
结束$ids = array(1,2,3,4,5,6,7);
但我能想到的唯一方法就是
$ids = array();
foreach(array($array1, $array2) as $a){
foreach($a as $id){
$ids[] = $id['id'];
}
}
$ids = array_unique($ids);
但这对我来说似乎没有那么高效,而且由于阵列功能丰富,我想知道是否有更好的方法?
答案 0 :(得分:2)
有几种方法可以解决这个问题。我想我可能会从两个原始数组的array_merge()
开始,然后用array_map()
展平它,最后调用array_unique()
。
// Combine them
$new = array_merge($array1, $array2);
// Flatten them
// array_map() is used to select the 'id' key from each
$new = array_map(function($a) {
return $a['id'];
}, $new);
// And get the unique values
$ids = array_unique($new);
print_r($ids);
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[5] => 5
[6] => 6
[7] => 7
)
看到查询后,这些不需要是两个数组。可以使用单个UNION
查询完成此操作。使用普通UNION
代替UNION ALL
会为您重复删除它们。
SELECT
game_id AS id
FROM user_game
WHERE user_id = :userid
UNION
SELECT
id
FROM games
WHERE referee_id = :userid OR reviewer_id = :userid
ORDER BY id
在提取行时,由于您只有一列,因此可以考虑在提取中直接展平它。
// For example
while ($row = $stmt->fetch()) {
// Pluck only the id from the row fetched
$ids[] = $row['id'];
}
// $ids is now a 1D array.
答案 1 :(得分:0)
不确定这是否是您要找的,但请尝试:
array_unique(array_merge($firstArr, $secndArr));
可能不是因为你的数组是关联的,但至少你可以跳过你的一些步骤。