简体   繁体   English

Php 多维数组在使用 foreach 循环时检查其他数组进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM