【问题标题】:How can I eliminate repeated elements but leaving the last element in the array PHP如何消除重复元素但将最后一个元素保留在数组PHP中
【发布时间】:2022-01-22 17:46:41
【问题描述】:

嗯,我需要能够消除重复的元素,但保留最后一个元素,即消除前面的元素,留下最后一个元素。

这就是我所拥有的

exists: [
 0: {intervention_id: 2, exists: "yes"}
 1: {intervention_id: 2, exists: "no"}
 2: {intervention_id: 2, exists: "yes"}
 3: {intervention_id: 5, exists: "yes"}
 4: {intervention_id: 6, exists: "no"}
 5: {intervention_id: 12, exists: "yes"}
]

我必须删除以前的。

0: {intervention_id: 2, exists: "yes"}
1: {intervention_id: 2, exists: "no"}

然后离开这个

2: {intervention_id: 2, exists: "yes"}

这就是我需要的

exists: [
 0: {intervention_id: 2, exists: "yes"}
 1: {intervention_id: 5, exists: "yes"}
 2: {intervention_id: 6, exists: "no"}
 3: {intervention_id: 12, exists: "yes"}
]

我需要保留最后一个并删除以前的

试试这个,但删除最后一个而不是以前的。

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;
}

【问题讨论】:

  • Javascript 还是 PHP?
  • @assembler HI BRO PHP
  • 是什么让一个元素“重复”?只是具有相同的 intervention_id 值?
  • @AlexHowansky 是的兄弟

标签: javascript php


【解决方案1】:

您可以简单地使用相同的键覆盖当前元素的值。在这种情况下,您将始终获得每个 ID 的最后一个元素

function unique_multidim_array($array, $key) {
    $uniq = [];
    foreach($array as $val) {
        $curVal = $val[$key]; // shortcut of the value
        $uniq[$curVal] = $val; // override previous value if exists
    }
    return array_values($uniq); // array_values to re-index array
}

$exists = [
    ['intervention_id' => 2, 'exists' => 'yes'],
    ['intervention_id' => 2, 'exists' => 'no'],
    ['intervention_id' => 2, 'exists' => 'yes'],
    ['intervention_id' => 5, 'exists' => 'yes'],
    ['intervention_id' => 6, 'exists' => 'no'],
    ['intervention_id' => 12, 'exists' => 'yes'],
];
$uniq = unique_multidim_array($exists, 'intervention_id');
print_r($uniq);

输出:

Array(
    [0] => Array(
            [intervention_id] => 2
            [exists] => yes
        )
    [1] => Array(
            [intervention_id] => 5
            [exists] => yes
        )
    [2] => Array(
            [intervention_id] => 6
            [exists] => no
        )
    [3] => Array(
            [intervention_id] => 12
            [exists] => yes
        )
)

live demo

【讨论】:

    【解决方案2】:
    $data = [
        [ 'intervention_id' => 2, 'exists' => 'yes' ],
        [ 'intervention_id' => 2, 'exists' => 'no' ],
        [ 'intervention_id' => 2, 'exists' => 'yes' ],
        [ 'intervention_id' => 5, 'exists' => 'yes' ],
        [ 'intervention_id' => 6, 'exists' => 'no' ],
        [ 'intervention_id' => 12, 'exists' => 'yes' ]
    ];
    
    $map = array_column($data, 'exists', 'intervention_id');
    
    array_walk($map, function (&$value, $key) {
      $value = [ 'intervention_id' => $key, 'exists' => $value ];
    }, ARRAY_FILTER_USE_BOTH);
    
    $result = array_values($map);
    
    print_r($result);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      相关资源
      最近更新 更多