You'll need 4 variables - lowestValue, Xindex, Yindex, and Zindex.
For each XYZ
Array.CurValue<lowestValue
Set lowestValue to Array.CurValue
Set Xindex to Array.CurX
Set Yindex to Array.CurY
Set Zindex to Array.CurZ
So it will go through the whole array, and whenever it finds a lower value than the last lowest value, it will record that new value and also the XYZ position.
With that first XYZ index, you can check the neighboring cells by adding or subtracting one from the appropriate index, with similar logic as before.
If you don't need the index/location of the lowest value, you can do a simple event as follows:
For each XYZ - Set lowestValue to min(Array.CurValue,lowestValue)
This might be useful if the value of interest is your first X axis - you can then use Array.IndexOf(lowestValue) to get the position. But that only works on the X axis.