Функция
array_keys возврaщает лишь ключи массива без значений, верно?
Тогда как цикл имя лишь ключи
главного массива($massive)
помимо ключей записывает еще и значения из главного массива
в массив для хранения($new)
$massive = ["dok"=>1, "xop" =>2, "kok" =>3]; // главный массив
$keys = array_keys($massive); // эта функция возвращает лишь ключи главного массива
shuffle($keys);
$new = []; // массив для хранения
foreach($keys as $items){ // так как переменная $keys хранит в себе лишь ключи главного массива,
// то и в $items по идее должны передаться лишь ключи $massive,
// но каким-то чудом, помимо ключей передаются еще и значения из $massive в $new
$new[$items] = $massive[$items];
}
foreach($new as $key => $items){
echo "Ключ:$key Значение:$items <br>";
}