# ArrayDepth and Dimensions count square brackets as a dimension

Something relatively simple:

myArrayDepth[arr_] := If[ArrayQ[arr], ArrayDepth[arr], 0]


Test:

ArrayDepth[f[f[a, b], f[c, d]]]
2

myArrayDepth[f[f[a, b], f[c, d]]]
0


Alternatively, use TensorRank[]:

TensorRank[{{1, 3}, {2, 4}}]
2

TensorRank[SparseArray[{1, 1} -> 1, {2, 2}]]
2


which remains unevaluated if given something that isn't a List[] or a SparseArray[]:

TensorRank[f[f[a, b], f[c, d]]]
TensorRank[f[f[a, b], f[c, d]]]


and throws a warning if not passed a rectangular array:

TensorRank[{{1, 2}, {3}}]
>> TensorRank::rect: Nonrectangular array encountered.
1


There is an undocumented option AllowedHeads that can be used for this purpose (so the usual warnings about undocumented features applies here):

ArrayDepth[f[f[a,b], f[c,d]], AllowedHeads->{List}]


0

2

You can use SetOptions in an init.m file to change the default:

SetOptions[ArrayDepth, AllowedHeads->{List}];
ArrayDepth[{{a,b}, {c,d}}]
ArrayDepth[f[f[a,b], f[c,d]]]


2

0

Note that you can also mix and match heads using this option, but note that the heads have to be the same at any particular level:

ArrayDepth[f[{a,b}, {c,d}], AllowedHeads->{List, f}]


2

1

myArrayDepth[arr_] := ArrayDepth[{arr}] - 1


ArrayDepth[f[f[a, b], f[c, d]]]

2