Php 从特定节点查找根索引数组的深度
我有一个类似的数组Php 从特定节点查找根索引数组的深度,php,multidimensional-array,depth,Php,Multidimensional Array,Depth,我有一个类似的数组 Array ( [0] => Array ( [id] => 81 [cata_key] => 908cbbcb86a1cf64b67c96ff
Array
(
[0] => Array
(
[id] => 81
[cata_key] => 908cbbcb86a1cf64b67c96ff
[cata_name] => Lunch
[app_key] => 2fabc0d9447c6375657dead4
[parentid] => 0
[subcategories] => Array
(
)
)
[1] => Array
(
[id] => 80
[cata_key] => baac98b4e73c05ebbf45bdc6
[cata_name] => Break Fast
[app_key] => 2fabc0d9447c6375657dead4
[parentid] => 0
[subcategories] => Array
(
[0] => Array
(
[id] => 82
[cata_key] => 5970b7afc450ef3b24573de9
[cata_name] => Rise Products
[app_key] => 2fabc0d9447c6375657dead4
[parentid] => 80
[subcategories] => Array
(
[0] => Array
(
[id] => 83
[cata_key] => 82e36d8f821e14fc8db1d4da
[cata_name] => Dosha
[app_key] => 2fabc0d9447c6375657dead4
[parentid] => 82
[subcategories] => Array
(
[0] => Array
(
[id] => 84
[cata_key] => 49730020d850439dd7de8747
[cata_name] => Masala Dosha
[app_key] => 2fabc0d9447c6375657dead4
[parentid] => 83
[subcategories] => Array
(
)
)
)
)
)
)
)
)
)
我想从特定的内部数组id查找根索引子数组的深度。例如,我想从parentid=0查找根索引数组的深度,它应该是1。parentId=0/80/82/83的根索引子数组的深度应为4
实际上,我的目标是限制数组的深度。应该有深度限制。因此,当任何人试图向该数组添加子数组时,我们应该找出当前数组的深度。例如,数组深度限制为4,任何人尝试在cata_name=Masala Dosha下添加子数组,深度已经达到,不允许添加新的子数组。但同时他可以在[cata_name]=>午餐下添加一个子数组,因为它的深度只有1,深度限制为4 试试这个,它管用,但我不喜欢这个 然后
我知道你已经排除了答案,但这里有一个选择:
<?php
$arrayHandler = new ArrayHandler();
$arr = array();
//Adding array examples (without checking)
$arr[0]['subcategories'] = array('id'=>80);
$arr[0]['subcategories']['whatever'] = array('id'=>82);
$arr[0]['subcategories']['whatever']['whatever2'] = array('id'=>83);
//Will be added because this is fourth level from $arr[0]
$chk = $arrayHandler->addSubArray($arr[0], $arr[0]['subcategories']['whatever']['whatever2']['whatever3']);
if ($chk !== false) {
$arr[0]['subcategories']['whatever']['whatever2']['whatever3'] = array('id'=>84);
}
//Won't be added because this is fitfth level from $arr[0]
$chk = $arrayHandler->addSubArray($arr[0], $arr[0]['subcategories']['whatever']['whatever2']['whatever3']['whatever4']);
if ($chk !== false) {
$arr[0]['subcategories']['whatever']['whatever2']['whatever3']['whatever4'] = array('id'=>85);
}
echo print_r($arr,true);
class ArrayHandler {
private $depthLimit = 4;
private $depth = 1;
public function addSubArray($checkFromNode, $addNode) {
if (is_array($checkFromNode)) {
//Do recursion as long as node is an array and count depth
//If not an array anymore return value sent to this parameter
foreach ($checkFromNode as $key=>$node) {
if (is_array($node)) {
$this->depth++;
$this->addSubArray($node, $addNode);
}
}
if (intval($this->depth) > intval($this->depthLimit)) {
return false;
}
return true;
}
}
}
?>
您需要输入0 return 1,80 return 2,83 return 3,84 return 4的func??否0 return 0或80 return 4,83 return 4和83 return 4在构建此树时是否只添加一个预先计算的级别值?否这是一个无限深度树。我们还必须检查子类别数组值,否则对于parentid=0,应该有两个可能的值
80:1
81:0
82:1
83:1
<?php
$arrayHandler = new ArrayHandler();
$arr = array();
//Adding array examples (without checking)
$arr[0]['subcategories'] = array('id'=>80);
$arr[0]['subcategories']['whatever'] = array('id'=>82);
$arr[0]['subcategories']['whatever']['whatever2'] = array('id'=>83);
//Will be added because this is fourth level from $arr[0]
$chk = $arrayHandler->addSubArray($arr[0], $arr[0]['subcategories']['whatever']['whatever2']['whatever3']);
if ($chk !== false) {
$arr[0]['subcategories']['whatever']['whatever2']['whatever3'] = array('id'=>84);
}
//Won't be added because this is fitfth level from $arr[0]
$chk = $arrayHandler->addSubArray($arr[0], $arr[0]['subcategories']['whatever']['whatever2']['whatever3']['whatever4']);
if ($chk !== false) {
$arr[0]['subcategories']['whatever']['whatever2']['whatever3']['whatever4'] = array('id'=>85);
}
echo print_r($arr,true);
class ArrayHandler {
private $depthLimit = 4;
private $depth = 1;
public function addSubArray($checkFromNode, $addNode) {
if (is_array($checkFromNode)) {
//Do recursion as long as node is an array and count depth
//If not an array anymore return value sent to this parameter
foreach ($checkFromNode as $key=>$node) {
if (is_array($node)) {
$this->depth++;
$this->addSubArray($node, $addNode);
}
}
if (intval($this->depth) > intval($this->depthLimit)) {
return false;
}
return true;
}
}
}
?>
Array ( [0] => Array ( [subcategories] => Array ( [id] => 80 [whatever] => Array ( [id] => 82 [whatever2] => Array ( [id] => 83 [whatever3] => Array ( [id] => 84 ) ) ) ) ) )