【问题标题】:Remove duplicates based on a specific key根据特定键删除重复项
【发布时间】:2015-04-20 04:36:09
【问题描述】:

得到一个像这样的多维数组:

$A = array(
  [0]=>
  array(
    ["rel"]=> 4
    ["name"]=> "Bar"
    ...
  )
  [1]=>
  array(
    ["rel"]=> 2
    ["name"]=> "Bar"
    ...
  )
  [2]=>
  array(
    ["rel"]=> 1
    ["name"]=> "Foo"
    ...
  )
  [3]=>
  array(
    ["rel"]=> 5
    ["name"]=> "Bar"
    ...
  )
  [4]=>
  array(
    ["rel"]=> 4
    ["name"]=> "Tee"
    ...
  )
)

我想根据特定键删除重复项,同时保持除索引键之外的原始数组结构。

为了这个例子,假设我想删除那些具有相同键 ["name"] 的子数组。

所以最终的结果应该是这样的:

$X = array(
  [0]=>
  array(
    ["rel"]=> 4
    ["name"]=> "Bar"
    ...
  )
  [1]=>
  array(
    ["rel"]=> 1
    ["name"]=> "Foo"
    ...
  )
  [2]=>
  array(
    ["rel"]=> 4
    ["name"]=> "Tee"
    ...
  )
)

我正在寻找解决此问题的有效方法。

理想情况下,array_unique 函数接受 key 值作为参数来查找给定数组上的重复项。

$X = array_key_unique($A, 'name');

【问题讨论】:

标签: php arrays multidimensional-array duplicate-data


【解决方案1】:

这个函数应该可以完成这项工作:

function array_key_unique($arr, $key) {
    $uniquekeys = array();
    $output     = array();
    foreach ($arr as $item) {
        if (!in_array($item[$key], $uniquekeys)) {
            $uniquekeys[] = $item[$key];
            $output[]     = $item;
        }
    }
    return $output;
}

并应用于上述特定问题:

$X = array_key_unique($A, 'name');

【讨论】:

    【解决方案2】:

    试试这个..

     for ($i = 0; $i < count($A); $i++)
        {
          $repeated= null;
          for ($j = $i+1; $j < count($A); $j++)
          {
            if (strcmp($A[$j]['name'],$A[$i]['name']) === 0)
            {
              $repeated= $j;
              break;
            }
          }
          if (!is_null($repeated))
            array_splice($A,$repeated,1);
        }
        print_r($A);
    

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2021-02-27
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多