我有一个函数,它必须接受一个点数组或一个点数组(一个2或3维数组)的数组。我正在寻找一种可靠的方法来检测它是否有2或3级。关键是,我不能指望在阵列上的按键做检查,所以这不会工作:如何正确计算数组中的级别数量?
$levels = isset($array[0][0]) && is_array($array[0][0]) ? 3 : 2;
..as第一关键可能不是0它通常是,但我不我不想依赖这个。无论如何,这是一个蹩脚的和非常谨慎的方式来做到这一点。最好,我想检查任何数量的水平没有必须遍历整个阵列。
这里的阵列可能是什么样子:
array(5) {
[2] => array(2) {
[x] => 3
[y] => 6
}
[3] => array(2) {
[x] => 4
[y] => 8
}
...
和三维阵列将包含这些阵列。
一些注意事项:
- 数组是很大,所以通过阵列完全循环是不是一个很好的选择
- 的阵列数字和顺序索引(与最后一个级别的例外,已经x和y)
- 数组键可能会或可能不会从0
在写这开始,我提出了这可能是可行的解决方案;一个递归函数,检查数组的第一项,如果是,则调用它自己的新发现数组等。
有没有更好的,更清晰的想法?用于支持可能同时具有标量值和数组的数组的附加点(例如,数组的第一项可能是字符串,但下一个是数组)。
我不认为有任何其他方式,因为PHP数组实际上是作为树实现的,而不是数组,所以它不知道数组中有多少“层”。 – 2009-12-23 07:53:39