如何比较两个数组值并返回我想要的值?



现有记录:

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'];
}

最新更新