首页 > 解决方案 > 仅在 PHP 中显示大于 x 秒的唯一 ID

问题描述

我试图弄清楚如何在这个数组中只输出 30 秒以上的唯一 ID。为了简单起见,它只需要在 30 秒内获取第一个值以获得唯一 ID。

$array = array(
0 => array(
    'id' => '1',
    'seconds' => '36'
),
1 => array(
    'id' => '1',
    'seconds' => '60'
),
2 => array(
    'id' => '1',
    'seconds' => '36'
),
3 => array(
    'id' => '2',
    'seconds' => '22'
),
4 => array(
    'id' => '1',
    'seconds' => '36'
),
5 => array(
    'id' => '2',
    'seconds' => '36'
),
6 => array(
    'id' => '3',
    'seconds' => '44'
),
7 => array(
    'id' => '3',
    'seconds' => '2'
),
8 => array(
    'id' => '4',
    'seconds' => '58'
),
9 => array(
    'id' => '6',
    'seconds' => '9'
),
10 => array(
    'id' => '6',
    'seconds' => '8'
));

理想的结果是这样的

$arrayResult = array(
0 => array(
    'id' => '1',
    'seconds' => '36'
),
1 => array(
    'id' => '2',
    'seconds' => '36'
),
2 => array(
    'id' => '3',
    'seconds' => '44'
),
3 => array(
    'id' => '4',
    'seconds' => '58'
));

目前,我只能获得 ID 的唯一值,而没有与“id”字段相关的秒数。

标签: phparraysunique

解决方案


您可以使用它array_reduce来迭代$array并仅提取您想要的值。

$array = array_reduce($array, function ($unique, $entry) {
    extract($entry);

    if (! isset($unique[$id]) && $seconds > 30) {
        $unique[$id] = $entry;
    }

    return $unique;
}, []);

$array = array_values($array);

推荐阅读