Показывать уникальный идентификатор в PHP больше, чем x секунд - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь выяснить, как выводить только уникальные идентификаторы, размер которых превышает 30 секунд в этом массиве.чтобы упростить задачу, нужно просто получить первое значение за 30 секунд для уникального идентификатора.

$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».

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
<code>$final_array = array();

foreach($array as $val)
{
    if($val['seconds'] > 30 && (!array_key_exists($val['id'], $final_array))){
        $final_array[$val['id']] = $val;
    }
}
echo "<pre>";
    print_r($final_array);
echo "
";

, если вы хотите сбросить ключи массива, вы можете использовать

<code>$final_array = array_values($final_array);

echo "<pre>";
    print_r($final_array);
echo "
";
0 голосов
/ 12 июня 2018

Вы можете использовать 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);
...