У меня есть массив значений, которые мне нужно хэшировать, используя различные алгоритмы хэширования, массив типов хеш-функции содержит все имена алгоритмов хэширования.
Я хочу переключить алгоритм хеширования для каждого набора значений из массива значений, используя значение hash_rotation, в этом случае я бы хотел переключить $hash_types
для каждого массива значений 3 значений, но проблема в том, когда $hash_types
массив исчерпан, я хотел бы вернуться к его первому элементу и использовать его.
$hash_rotation = 3;
$hash_types = [
'type_1',
'type_2',
'type_3',
'type_4'
];
$values = [
'something goes 1',
'something goes 2',
'something goes 3',
'something goes 4',
'something goes 5',
'something goes 6',
'something goes 7',
'something goes 8',
'something goes 9',
'something goes 10',
'something goes 11'
];
$current_item = 0;
function rotate_hash($index) {
global $hash_types;
global $hash_rotation;
global $current_item;
if (($index) % $hash_rotation === 0) {
$current_item++;
if ($current_item >= count($hash_types))
$current_item = 0;
}
}
foreach ($values as $index => $value) {
rotate_hash($index);
}
Похоже, вам нужно воспользоваться преимуществами манипуляции указателя массива с next()
а также current()
:
$i = 0;
# Loop values
foreach($values as $value) {
# Get the current value of the hash
$curr = current($hash_types);
# If the count is equal or higher than what you want
if($i >= $hash_rotation) {
# Move the pointer to the next key/value in the hash array
$curr = next($hash_types);
# If you are at the end of the array
if($curr === false) {
# Reset the internal pointer to the beginning
reset($hash_types);
# Get the current hash value
$curr = current($hash_types);
}
}
# Increment
$i++;
echo $value.'=>'.$curr.'<br />';
}
Дает тебе:
something goes 1=>type_1
something goes 2=>type_1
something goes 3=>type_1
something goes 4=>type_2
something goes 5=>type_3
something goes 6=>type_4
something goes 7=>type_1
something goes 8=>type_2
something goes 9=>type_3
something goes 10=>type_4
something goes 11=>type_1
Других решений пока нет …