php - 数组根据索引删除重复项/保留第一次出现

标签 php performance algorithm php-5.3

我写了一个简单的算法来只存储我的艺术家数组中第一次出现的名字。我不关心艺术家 ID。该算法运行良好,但我担心性能。如果 $performers 数组是 200 位艺术家,有没有人看到一种更简单的编写方法也可以提高性能?

$performers = array(
   array('id' => '12','name' => 'Grouplove'),
   array('id' => '24','name' => 'Grouplove'),
   array('id' => '43','name' => 'Coldplay')
);

$tmp = array();
foreach($performers as $performer)
{
   $count = 0;
   foreach($tmp as $test)
   {
      if($performer['name'] == $test['name'])
      {
         $count++;
      }
   }
   if(!$count)
   {
      $tmp[] = $performer;
   }

}

最佳答案

将它们添加到 $tmp 数组时,您可以将键指定为艺术家的姓名。然后你可以只检查 isset($tmp[$performer['name']]) 是否为真,如果它已经存在则跳过它。这样你就可以避免内部循环。填充新的 $tmp 数组后,如果键有问题,您只能使用 array_values($tmp) 获取值。

$tmp = array();
foreach($performers as $performer) {
  if(!isset($tmp[$performer['name']]){
    $tmp[$performer['name']] = $performer;
  }
}

你会得到这样的东西:

array(
    'Grouplove' => array(
            'id' => '12',
            'name' => 'Grouplove',
     ),
    'Coldplay'  =>array(
            'id' => '43',
            'name' => 'Coldplay'
     )
);

关于php - 数组根据索引删除重复项/保留第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028211/

相关文章:

php - 语言选择列表

arrays - Haskell:List v. Array,性能差异

php - 如何在mysql中设置money的数据类型

php - Opencart修改系统相关问题

php - XPath 查询有时不显示正确的元素

javascript - 这个 Javascript 函数高效吗?

regex - Haskell 正则表达式性能

algorithm - 如果在一分钟内移动到N + 1,N - 1和2 * N,如何在最短的时间内到达目标楼层?

algorithm - 如何在不修改指针的情况下递归地反转单链表?

algorithm - The Dancing Links Algorithm - 一种解释性较差但更多关于实现的解释?