0

我从 api 查询中获取以下数据,我需要删除具有重复员工 ID 值的数据集并保留最后出现的数据集。

$holiday_array = [
    [
        'employee' => [
            'id' => 456062
        ],
        'reviewed_by' => [
            'id' => 260700
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '11.0',
        'id' => 11505539,
        'start_date' => '2021-03-19',
        'end_date' => '2021-04-02',
        'action' => 'request',
        'status]'=> 'approved',
        'created_at' => '2021-02-22T09:19:57+00:00',
        'updated_at' => '2021-02-23T13:28:41+00:00',
    ],
    [
        'employee' => [
            'id' => 522010
        ],
        'reviewed_by' => [
            'id' => 260760
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '2.0',
        'id' => 11730818,
        'start_date' => '2021-03-19',
        'end_date' => '2021-03-22',
        'action' => 'request',
        'status'=> 'approved',
        'created_at' => '2021-03-10T14:14:48+00:00',
        'updated_at' => '2021-03-15T08:04:36+00:00',
    ],
    [
        'employee' => [
            'id' => 638070
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11861461,
        'start_date' => '2021-03-22',
        'action' => 'request',
        'status' => 'approved',
        'notes' => 'test',
        'created_at' => '2021-03-22T14:30:33+00:00',
        'updated_at' => '2021-03-22T14:31:39+00:00'
    ],
    [
        'employee' => [
            'id' => 638070
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11861498,
        'start_date' => '2021-03-22',
        'action' => 'cancel',
        'status' => 'approved',
        'created_at' => '2021-03-22T14:31:55+00:00',
        'updated_at' => '2021-03-22T14:32:26+00:00'
    ],
    [
        'employee' => [
            'id' => 351779
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11863071,
        'start_date' => '2021-03-22',
        'action' => 'request',
        'status' => 'approved',
        'notes' => 'Test',
        'created_at' => '2021-03-22T15:28:48+00:00',
        'updated_at' => '2021-03-23T14:41:13+00:00'
    ],
    [
        'employee' => [
            'id' => 638070
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11864185,
        'start_date' => '2021-03-22',
        'action' => 'request',
        'status' => 'approved',
        'notes' => 'test',
        'created_at' => '2021-03-22T16:14:15+00:00',
        'updated_at' => '2021-03-22T16:41:18+00:00'
    ],
    [
        'employee' => [
            'id' => 638070
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11877400,
        'start_date' => '2021-03-22',
        'action' => 'cancel',
        'status' => 'approved',
        'created_at' => '2021-03-23T14:24:54+00:00',
        'updated_at' => '2021-03-23T14:32:35+00:00'
    ],
    [
        'employee' => [
            'id' => 351779
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11878419,
        'start_date' => '2021-03-22',
        'action' => 'cancel',
        'status' => 'approved',
        'created_at' => '2021-03-23T15:10:22+00:00'
    ],
    [
        'employee' => [
            'id' => 351779
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11878445,
        'start_date' => '2021-03-22',
        'action' => 'cancel',
        'status' => 'approved',
        'created_at' => '2021-03-23T15:11:47+00:00'
    ],
    [
        'employee' => [
            'id' => 351779
        ],
        'reviewed_by' => [
            'id' => 578193
        ],
        'reason' => null,
        'type' => 'Holiday',
        'deducted' => '1.0',
        'id' => 11878450,
        'start_date' => '2021-03-22',
        'action' => 'cancel',
        'status' => 'approved',
        'created_at' => '2021-03-23T15:11:53+00:00'
    ]
]

10 组数据中只有 4 组属于唯一的员工 ID,所以我需要以下输出:

Array
(
    [0] => Array
        (
            [employee] => Array
                (
                    [id] => 456062
                )

            [reviewed_by] => Array
                (
                    [id] => 260700
                )

            [reason] => 
            [type] => Holiday
            [deducted] => 11.0
            [id] => 11505539
            [start_date] => 2021-03-19
            [end_date] => 2021-04-02
            [action] => request
            [status] => approved
            [created_at] => 2021-02-22T09:19:57+00:00
            [updated_at] => 2021-02-23T13:28:41+00:00
        )
[1] => Array
    (
        [employee] => Array
            (
                [id] => 522010
            )

        [reviewed_by] => Array
            (
                [id] => 260760
            )

        [reason] => 
        [type] => Holiday
        [deducted] => 2.0
        [id] => 11730818
        [start_date] => 2021-03-19
        [end_date] => 2021-03-22
        [action] => request
        [status] => approved
        [created_at] => 2021-03-10T14:14:48+00:00
        [updated_at] => 2021-03-15T08:04:36+00:00
    )
[6] => Array
    (
        [employee] => Array
            (
                [id] => 638070
            )

        [reviewed_by] => Array
            (
                [id] => 578193
            )

        [reason] => 
        [type] => Holiday
        [deducted] => 1.0
        [id] => 11877400
        [start_date] => 2021-03-22
        [action] => cancel
        [status] => approved
        [created_at] => 2021-03-23T14:24:54+00:00
        [updated_at] => 2021-03-23T14:32:35+00:00
    )
[9] => Array
    (
        [employee] => Array
            (
                [id] => 351779
            )

        [reviewed_by] => Array
            (
                [id] => 578193
            )

        [reason] => 
        [type] => Holiday
        [deducted] => 1.0
        [id] => 11878450
        [start_date] => 2021-03-22
        [action] => cancel
        [status] => approved
        [created_at] => 2021-03-23T15:11:53+00:00
    )

)

所有数组必须按键值[employee][id]排序,如果没有重复的数组具有相同的[employee][id],则只输出孤立的数组,如果有例如4个相同的(2,3 ,5,6),然后输出最后一个数组 (6)。

我写了这样的循环,但对我来说只推断出工人的 id,我需要推断出这些 id 进入的所有最后一个数组。

for($i = 0; $i < count($holiday_array); $i++) {
    $holiday_arrays[] = $holiday_array[$i]["employee];
    $array[] = array_unique($holiday_arrays[$i], SORT_REGULAR);
}
return $array;
4

2 回答 2

0

由于 php 不允许在数组的任何级别上存在重复键,因此您可以滥用此规则并根据深度员工 id 在结果数组上分配临时的第一级键。完成后只需重新索引结果数组。

我假设保留原始的第一级密钥没有任何价值。

您的示例输入过于冗长,因此我将其简化为有意义的部分,以证明保留了最后出现的条目。

代码:(演示

$holiday_array = [
    ['employee' => ['id' => 456062], 'num' => 1],
    ['employee' => ['id' => 522010], 'num' => 1],
    ['employee' => ['id' => 638070], 'num' => 1],
    ['employee' => ['id' => 638070], 'num' => 2],
    ['employee' => ['id' => 351779], 'num' => 1],
    ['employee' => ['id' => 638070], 'num' => 3],
    ['employee' => ['id' => 638070], 'num' => 4],
    ['employee' => ['id' => 351779], 'num' => 2],
    ['employee' => ['id' => 351779], 'num' => 3],
    ['employee' => ['id' => 351779], 'num' => 4],
];

$result = [];
foreach ($holiday_array as $row) {
    $result[$row['employee']['id']] = $row;
}
var_export(array_values($result));

输出:

array (
  0 => 
  array (
    'employee' => 
    array (
      'id' => 456062,
    ),
    'num' => 1,
  ),
  1 => 
  array (
    'employee' => 
    array (
      'id' => 522010,
    ),
    'num' => 1,
  ),
  2 => 
  array (
    'employee' => 
    array (
      'id' => 638070,
    ),
    'num' => 4,
  ),
  3 => 
  array (
    'employee' => 
    array (
      'id' => 351779,
    ),
    'num' => 4,
  ),
)
于 2021-03-24T17:56:18.770 回答
0

感谢您的快速响应,但我在数组中的值发生了变化,我以这个为例,所以我得到的每个查询在中间返回不同数量的数组,不同数量的相同数组,有时没有相同的数组,所以很遗憾它不适合,我已经大致找到了一个解决方案,它看起来像这样:

$details = get_user_holiday_request_approved();
$reversed = array_reverse($details);
function unique_multidim_array($array, $key){
        $temp_array = array();
        $i = 0;
        $key_array = array();
        foreach($array as $val) {
            if (!in_array($val[$key], $key_array)) {
                $key_array[$i] = $val[$key];
                $temp_array[$i] = $val;
            }
            ++$i;
        }
        return $temp_array;
    };
    $details_new = unique_multidim_array($reversed,'employee');

但它给我带来了含义为 0、1、2、4 的数组,也就是说,它删除了所有重复值并输出第一个值,但我需要最后一个,我将函数应用于我的数组:

array_reverse();
于 2021-03-24T18:20:57.000 回答