现有记录:
array:3 [
0 => array:2 [
"groupTaskUuid" => "98790287437987860"
"purchaseOrderGroupTasks" => "98790287437987893"
]
1 => array:2 [
"groupTaskUuid" => "98790287437987862"
"purchaseOrderGroupTasks" => "98790287437987894"
]
2 => array:2 [
"groupTaskUuid" => "98790287437987861"
"purchaseOrderGroupTasks" => "98790287437987895"
]
]
GroupTaskUuid Array:
array:2 [
0 => "98790287437987862"
1 => "98790287437987861"
]
如何将两个数组与"groupTaskUuid"进行比较,但在结果中返回"purchaseOrderGroupTasks"值?
结果是我想要的(即"采购订单组任务"(:
array:2 [
"0" => "98790287437987894"
"1" => "98790287437987895"
]
我会建议这样的事情:
$filtered = array_filter(
$records,
function($el) use($GroupTaskUuid) {
return in_array($el["groupTaskUuid"], $GroupTaskUuid);
}
);
$only_purchase_column = array_column($filtered, "purchaseOrderGroupTasks")
由于您说会有很多行,因此您需要GroupTaskUuid
数组转换为关联数组,其中这些 UUID 是键。这样,您可以平均O(1)
时间进行isset()
签到。
您遍历数据集,检查该 UUID 键是否存在于我们的地图中,如果存在,则将其purchaseOrderGroupTasks
收集到新的结果数组中。
片段:
<?php
$data = [
[
"groupTaskUuid" => "98790287437987860",
"purchaseOrderGroupTasks" => "98790287437987893"
],
[
"groupTaskUuid" => "98790287437987862",
"purchaseOrderGroupTasks" => "98790287437987894"
],
[
"groupTaskUuid" => "98790287437987861",
"purchaseOrderGroupTasks" => "98790287437987895"
]
];
$GroupTaskUuid = [
"98790287437987862",
"98790287437987861"
];
$GroupTaskUuidFlipped = array_flip($GroupTaskUuid); // make UUID values as keys
$purchaseOrderGroupTasks = [];
foreach($data as $value){
if(isset($GroupTaskUuidFlipped[$value['groupTaskUuid']])){
$purchaseOrderGroupTasks[] = $value['purchaseOrderGroupTasks'];
}
}
print_r($purchaseOrderGroupTasks);
您可以使用
$purchaseOrderGroupTasks = [];
foreach($GroupTaskUuid as $uuid){
if($key = array_search($uuid, array_column($data, 'groupTaskUuid')) !== false)
$purchaseOrderGroupTasks[] = $data[$key]['key'];
}