В итоге я решил перемешивать массив один раз, и сохранять потом в базу уже перемешанный массив, так как это ACF сделал вот так
function shuffle_assoc($list) {
// Взял вот тут https://qna.habr.com/q/1006513
if (!is_array($list)) {
return $list;
}
$keys = array_keys($list);
shuffle($keys);
$random = [];
foreach ($keys as $key) {
$random[$key] = $list[$key];
}
return $random;
}
function reset_testimonials() {
$source = get_field('test_repeater', 'options');
$new_order = shuffle_assoc($source);
update_field( 'test_repeater', $new_order, 'options' );
wp_die();
}
Ну и вывел в админке кнопку которая по AJAX вызывает reset_testimonials и сохраняет новый порядок значений.
Я просто пол дня провел пытаясь решить проблему на выводе беря исходную последовательность и преобразовывая порядок перед выдачей. Но тогда все равно надо как то генерировать и сохранять массив для сортировки и потом с помощью array_multisort выводить значения первого массива по порядку второго. Оказалось проще правда один раз перемешать и сохранить новый порядок в том же виде. Все работает. Всем спасибо за участие. Но я зря создал этот вопрос, в итоге решил все немного изменив подход к задаче.