Переместить индекс массива при достижении определенного индекса в другом массиве

У меня есть массив значений, которые мне нужно хэшировать, используя различные алгоритмы хэширования, массив типов хеш-функции содержит все имена алгоритмов хэширования.
Я хочу переключить алгоритм хеширования для каждого набора значений из массива значений, используя значение 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);
}

1

Решение

Похоже, вам нужно воспользоваться преимуществами манипуляции указателя массива с 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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]