私は配列を持っています。いくつかの条件を実行した後、結果の配列は以下のようになります。複数値の多次元配列で検索する
//filtered aray
Array
(
[2] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => -1129794.96
[member_id] => 1
[type] => InternalTransfers
[transaction_type] => Accumulation
)
[13] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => 1129794.96
[member_id] => 1
[type] => PensionsRolledBack
[transaction_type] => Accumulation
)
[23] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => -1129794.96
[member_id] => 1
[type] => PensionsRolledBack
[transaction_type] => Pension
)
[24] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => 1129794.96
[member_id] => 2
[type] => InternalTransfers
[transaction_type] => Accumulation
)
[36] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => -1129794.96
[member_id] => 2
[type] => PensionCommencement
[transaction_type] => Accumulation
)
[56] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => 1129794.96
[member_id] => 2
[type] => PensionCommencement
[transaction_type] => Pension
)
)
私の仕事は、オフセット取引をすべて削除することです。たとえば、あるメンバーの累積に肯定と否定が含まれている場合は、それを削除します。
この結果の配列を使用すると、member_id
,transaction_type
およびtransaction_amount
に基づいてフィルタリングする必要があります。 (正か負か)。 member_id
とtransaction_type
が同じ場合、オフセット取引を削除する必要があります。
除去した後、得られた配列は、次のようになります。私はMEMBER_ID、TRANSACTION_TYPEとTRANSACTION_AMOUNTに基づいてフィルタリングしている
Array
(
[23] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => -1129794.96
[member_id] => 1
[type] => PensionsRolledBack
[transaction_type] => Pension
)
[56] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => 1129794.96
[member_id] => 2
[type] => PensionCommencement
[transaction_type] => Pension
)
)
MY CODE
$total = $array;
array_walk($array, function($value) use(&$total){
$result = $this->multiSearch($total, array('transaction_type' =>$value['transaction_type'], 'smsf_actuarial_form_member_id' => $value['smsf_actuarial_form_member_id'], 'transaction_amount' => $value['transaction_amount']));
pr($result);exit;
});
public function multiSearch(array $array, array $pairs) {
$found = array();
foreach ($array as $aKey => $aVal) {
$coincidences = 0;
foreach ($pairs as $pKey => $pVal) {
if (array_key_exists($pKey, $aVal)) {
if(is_double($aVal[$pKey]) && is_double($pVal) && abs($aVal[$pKey]) == abs($pVal)){
$coincidences++;
} else if($aVal[$pKey] == $pVal){
$coincidences++;
}
}
}
if ($coincidences == count($pairs)) {
$found[$aKey] = $aVal;
}
}
return $found;
}
。
[2] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => -1129794.96
[smsf_actuarial_form_member_id] => 1
[type] => InternalTransfers
[transaction_type] => Accumulation
)
[13] => Array
(
[OriginEventId] => 0152c945-e15b-48f9-8a0e-e4b9eace4731
[Description] => Pension Reversion
[transaction_date] => 2014-10-30T00:00:00
[transaction_amount] => 1129794.96
[smsf_actuarial_form_member_id] => 1
[type] => PensionsRolledBack
[transaction_type] => Accumulation
)
同じメンバーID、取引タイプ、取引金額が肯定と否定の両方である場合は、それを削除する必要があります。
フロー
フィルタMEMBER_ID、TRANSACTION_TYPE及びTRANSACTION_AMOUNT(正と負の両方)の配列。
結果の配列に肯定と否定の両方がある場合は、両方の配列をフィルタ処理された配列とリンク解除します。
条件は動的に機能します。
unset機能を使用し、配列内の要素を削除するには(私は何かが足りないのですか?)、単にループするforeachを使用して値を通って、 ifを使用してください –
[array_filter(function($ input){...}、$ array); '](http://php.net/manual/en/function.array-filter.php )? – Bobot