分组数组数据

时间:2018-12-10 17:12:29

标签: php arrays

我试图弄清楚如何从以下数据结构中获取数据。我设法将一个平面数组分组为以下数组,但发现很难找到合适的资源来解释如何获取数据。我正在寻找每个组中项目的数量。然后我想从内部数组中打印ids ...

nodejs

2 个答案:

答案 0 :(得分:0)

$my_array1 = array(
    'grinds' =>
        array(
            0 =>
                array(
                    'id' => 16562,
                    'slug' => 'grinds',
                ),
            1 =>
                array(
                    'id' => 16561,
                    'slug' => 'grinds',
                ),
        ),
    'online-grinds' =>
        array(
            0 =>
                array(
                    'id' => 16566,
                    'slug' => 'online-grinds',
                ),
        ),
);

获取计数:

$counts = array();
foreach ($my_array1 as $key => $val) {
    $counts[$key] = count($val);
}
var_dump($counts);

产量:

array(2) {
    ["grinds"]=>
    int(2)
    ["online-grinds"]=>
    int(1)
}

获取内部ID:

$innerids = array();
foreach ($my_array1 as $key => $val) {
    foreach ($val as $key2 => $val2) {
        $innerids[] = $val2['id'];
    }
}
var_dump($innerids);

产量:

array(3) {
    [0]=>
    int(16562)
    [1]=>
    int(16561)
    [2]=>
    int(16566)
}

答案 1 :(得分:0)

您可以使用array_map,然后对每个项目使用array_column并指定字段名称,然后使用array_count_values来计算唯一值。

然后将它们组合到一个数组中,并再次使用现有键作为新数组的键。

$arrays = array_map(function($x) {
    return [
        array_count_values(array_column($x, 'id')),
        array_count_values(array_column($x, 'slug'))
        ];
}, $arrays);

print_r($arrays);

结果

Array
(
    [grinds] => Array
        (
            [0] => Array
                (
                    [16562] => 1
                    [16561] => 1
                )

            [1] => Array
                (
                    [grinds] => 2
                )

        )

    [online-grinds] => Array
        (
            [0] => Array
                (
                    [16566] => 1
                )

            [1] => Array
                (
                    [online-grinds] => 1
                )

        )

)

Demo