- var_dump: documentation ( source)
- strpos: documentation ( source)
- array_shift: documentation ( source)
- explode: documentation ( source)
- strrev: documentation ( source)
<?php
$controlValue = [
'item1' => 'val1',
'item2' => 'val2',
'item3' => [
'item4' => 'val4',
'item5' => 'val5',
],
];
$encryptedFields = [
'item2',
'item3.item5',
];
foreach ($encryptedFields as $encryptedField) {
if (strpos($encryptedField, '.') !== false) {
$encryptedFieldSegments = explode('.', $encryptedField);
$encryptedFieldSegment = array_shift($encryptedFieldSegments);
if (!isset($controlValue[$encryptedFieldSegment])) {
continue;
}
$valueReference = &$controlValue[$encryptedFieldSegment];
foreach ($encryptedFieldSegments as $encryptedFieldSegment) {
if (!isset($valueReference[$encryptedFieldSegment])) {
break;
}
$valueReference = &$valueReference[$encryptedFieldSegment];
$vaultCiphertext = strrev($valueReference[$encryptedField]);
$valueReference[$encryptedField] = $vaultCiphertext;
}
unset($valueReference);
} elseif (isset($controlValue[$encryptedField])) {
$vaultCiphertext = strrev($controlValue[$encryptedField]);
$controlValue[$encryptedField] = $vaultCiphertext;
}
}
var_dump($controlValue);