在php中查找具有特定键和值的数组计数

时间:2016-10-26 11:18:27

标签: php arrays

我有一个多维数组,其值为

$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
            )
         );

我想找到特定身份证的孩子数。 在我的情况下,我希望结果像

find_children($array, 1);
// output : 2

find_children($array, 3);
// output : 1

我知道这是通过使用 for loop 完成的。该函数是否存在任何PHP数组函数?

2 个答案:

答案 0 :(得分:2)

您可以使用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

你是否喜欢这个循环是一个品味问题。

答案 1 :(得分:2)

您可以将计数与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并返回其计数

的元素