我有一个多维数组,包含以下值
$array = array(
0 => array (
"id" => 1,
"parent_id" => 0
),
1 => array (
"id" => 2,
"parent_id" => 1
),
2 => array (
"id" => 3,
"parent_id" => 1,
)
3 => array (
"id" => 4,
"parent_id" => 0
)
4 => array (
"id" => 5,
"parent_id" => 3
)
);
我想找到特定id的子节点的个数。在我的例子中,我希望结果像
find_children($array, 1);
// output : 2
find_children($array, 3);
// output : 1
我知道这是通过使用for循环来完成的。这个函数是否存在PHP数组函数? 可以将count与array_filter一起使用
function doSearch($id, array $array) {
$arr = array_filter($array, function ($var) use ($id){
if ($id === $var['parent_id']) {
return true;
}
});
return count($arr);
}
或缩短版
function doSearch($id, array $array) {
return count(array_filter($array, function($var) use ($id) {
return $id === $var['parent_id'];
}));
}
它获取$id等于parent_id的元素并返回它们的计数
您可以使用array_filter
来实现它,将数组过滤到匹配给定父id的元素,然后返回过滤后的数组的count
。过滤器提供了一个回调函数,该回调函数在给定数组的每个元素上运行。
function find_children($array, $parent) {
return count(array_filter($array, function ($e) use ($parent) {
return $e['parent_id'] === $parent;
}));
}
find_children($array, 1); // 2
find_children($array, 3); // 1
find_children($array, 10); // 0
你是否喜欢这个而不是循环,这是一个品味问题。