У меня есть функция, которая должна принимать массив точек или массив массива точек (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
}
...
И трехмерный массив будет содержать эти массивы.
Некоторые примечания:
- Массивы велики, поэтому полностью перекручивание через массивы не очень хороший вариант
- Массивы численно и последовательно индексируются (за исключением последнего уровня, который имеют й и у)
- ключей массива могут или не могут начинаться с 0
Во время написания этого я придумал решение, которое могло бы быть возможным; рекурсивная функция, которая проверяет первый элемент массива, если он есть, затем называет себя вновь найденным массивом и т. д.
Есть ли лучшие, более чистые идеи? Бонусные точки для поддержки массивов, которые могут иметь как скалярные значения, так и массивы (например, первый элемент массива может быть строкой, а следующий - массивом).
Я не думаю, что есть другой способ, поскольку массив PHP фактически реализован как дерево, а не массив, поэтому он не знает, сколько «уровней» есть в массиве. –