[英]Php multi dimensional array check other array for sorting while using foreach loop
I have an two array like this below我有一个像下面这样的两个数组
First:第一的:
Array
(
[0] => Array
(
[name] => Basic
[parameter_type] => 1
[id] => 1
[earning_or_deduction] => 1
)
[1] => Array
(
[name] => House rent allowance
[parameter_type] => 1
[id] => 2
[earning_or_deduction] => 1
)
[2] => Array
(
[name] => Conveyance
[parameter_type] => 1
[id] => 3
[earning_or_deduction] => 1
)
[3] => Array
(
[name] => Car allowance
[parameter_type] => 1
[id] => 4
[earning_or_deduction] => 1
)
[4] => Array
(
[name] => Cost of living allowance
[parameter_type] => 1
[id] => 5
[earning_or_deduction] => 1
)
[5] => Array
(
[name] => Food allowance
[parameter_type] => 1
[id] => 6
[earning_or_deduction] => 1
)
[6] => Array
(
[name] => Telephone allowance
[parameter_type] => 1
[id] => 7
[earning_or_deduction] => 1
)
[7] => Array
(
[name] => Special allowance
[parameter_type] => 1
[id] => 8
[earning_or_deduction] => 1
)
[8] => Array
(
[name] => Vehicle allowance
[parameter_type] => 1
[id] => 9
[earning_or_deduction] => 1
)
[9] => Array
(
[name] => Other allowance fixed
[parameter_type] => 1
[id] => 10
[earning_or_deduction] => 1
)
[10] => Array
(
[name] => Oman pasi
[parameter_type] => 1
[id] => 13
[earning_or_deduction] => 2
)
[81] => Array
(
[name] => Salary advance payment
[parameter_type] => 2
[id] => 18
[earning_or_deduction] => 1
)
)
Second:第二:
Array
(
[0] => Array
(
[name] => Basic
[parameter_type] => 1
[id] => 1
[earning_or_deduction] => 1
[per_day_amount] => 12999.999
)
[1] => Array
(
[name] => House rent allowance
[parameter_type] => 1
[id] => 2
[earning_or_deduction] => 1
[per_day_amount] => 1500
)
[2] => Array
(
[name] => Conveyance
[parameter_type] => 1
[id] => 3
[earning_or_deduction] => 1
[per_day_amount] => 750
)
[3] => Array
(
[name] => Car allowance
[parameter_type] => 1
[id] => 4
[earning_or_deduction] => 1
[per_day_amount] => 750
)
[4] => Array
(
[name] => Cost of living allowance
[parameter_type] => 1
[id] => 5
[earning_or_deduction] => 1
[per_day_amount] => 750
)
[5] => Array
(
[name] => Food allowance
[parameter_type] => 1
[id] => 6
[earning_or_deduction] => 1
[per_day_amount] => 750
)
[6] => Array
(
[name] => Telephone allowance
[parameter_type] => 1
[id] => 7
[earning_or_deduction] => 1
[per_day_amount] => 150
)
[7] => Array
(
[name] => Special allowance
[parameter_type] => 1
[id] => 8
[earning_or_deduction] => 1
[per_day_amount] => 200.001
)
[8] => Array
(
[name] => Vehicle allowance
[parameter_type] => 1
[id] => 9
[earning_or_deduction] => 1
[per_day_amount] => 249.999
)
[9] => Array
(
[name] => Other allowance fixed
[parameter_type] => 1
[id] => 10
[earning_or_deduction] => 1
[per_day_amount] => 350.001
)
[10] => Array
(
[name] => Oman pasi
[parameter_type] => 1
[id] => 13
[earning_or_deduction] => 2
[per_day_amount] => 210
)
)
While doing for each i have to check based on id, if id not available on 2nd array means need to place empty array like below在为每个我做的时候,我必须根据 id 检查,如果 id 在第二个数组上不可用意味着需要像下面这样放置空数组
[11] => Array
(
[name] => ''
[parameter_type] => 0
[id] =>0
[earning_or_deduction] =>0
[per_day_amount] =>0
)
I tried using array merge with duplicate removal but no luck because i need to check while doing foreach.我尝试将数组合并与重复删除一起使用,但没有运气,因为我需要在执行 foreach 时进行检查。
You need to use array_column()
to get all id's from second array and then use foreach()
on first array and check via in_array()
that id
exist or not?您需要使用
array_column()
从第二个数组中获取所有 id,然后在第一个数组上使用foreach()
并通过in_array()
检查id
是否存在? if not assign empty values array otherwise assign values array如果不分配空值数组,否则分配值数组
$finalArray = array();
foreach($firstArray as $arr){
$secondArrayIds = array_column($secondArray,'id');
if(!in_array($arr['id'],$secondArrayIds)){
$finalArray[] = array(
'name' => '',
'parameter_type' => 0,
'id' =>0,
'earning_or_deduction' =>0,
'per_day_amount' =>0
);
}else{
$finalArray[] = $arr;
}
}
try this尝试这个
$FinalData = [];
foreach ($FirstArray as $FirstArr) {
$FinalData[] = Get_Amount($FirstArr['id'], $SecondArray);
}
function Get_Amount($id, $Arrays)
{
$Amount = '';
// Arrays is Your Second Array
foreach ($Arrays as $Array) {
if ($Array['id'] == $id) {
$MyArray = $Array;
break;
}
}
if (empty($Amount)) {
return [
'name' => '',
'parameter_type' => 0,
'id' => 0,
'earning_or_deduction' => 0,
'per_day_amount' => 0
];
}
return $Array;
}
Do it with,这样做,
$id_dic = array_column($array2,null,"id");
foreach($array1 as &$v){
if(!isset($id_dic[$v["id"]])){
$v = array(
'name' => '',
'parameter_type' => 0,
'id' =>0,
'earning_or_deduction' =>0,
'per_day_amount' =>0
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.