You're assigning to disks[worker01], but trying to read from disks[0] etc. The indexes are different.
As someone commented, Bash doesn't have multidimensional arrays, and that's what you really would need here. You can simulate that roughly with with space-separated strings, but then you need to split the string explicitly.
#!/bin/bash declare -A disks disks["host1"]="sda sdb" disks["host2"]="sda sdb sdc" for m in "${!disks[@]}"; do # split the string to array 'd' IFS=' ' read -a d <<< "${disks[$m]}" printf "$m has disk %s\n" "${d[@]}" done