# 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}]
ArrayDepth[f[f[a,b], f[c,d]], AllowedHeads->{f}]
```

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}]
ArrayDepth[f[{a,b}, f[c,d]], AllowedHeads->{List, f}]
```

2

1

In line with my answer from the linked question:

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

Just like J.M.'s answer:

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

`2 0`