首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP数组中的数字来识别和重命名重复的值?

如何使用PHP数组中的数字来识别和重命名重复的值?
EN

Stack Overflow用户
提问于 2022-07-13 23:03:25
回答 2查看 80关注 0票数 0

我有一个PHP数组如下:

代码语言:javascript
复制
Array
(
    [0] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) 
    [1] =>   Microsoft Network Adapter Multiplexor Driver 
    [2] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) #75 
    [3] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) 
)

我需要从PHP数组中识别重复的值,并在末尾使用数字重命名,如下所示,

代码语言:javascript
复制
Array
(
    [0] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_1 
    [1] =>   Microsoft Network Adapter Multiplexor Driver 
    [2] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) #75 
    [3] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_2 
)

我尝试过array_count_values()来检测重复的,但是我如何重命名它呢?https://onlinephp.io/c/739cb

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-14 00:09:54

这应该能起作用:

代码语言:javascript
复制
$originalArray = array(
  "QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)",
  "Microsoft Network Adapter Multiplexor Driver",
  "Microsoft Network Adapter Multiplexor Driver Simplified",
  "QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) #75",
  "QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)",
  "Microsoft Network Adapter Multiplexor Driver",
  "QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)",
  "QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)",
);

$arrayCountVals = array_count_values($originalArray);
foreach ($arrayCountVals as $key => $count) {
  $increment = 1;
  if ($count === 1) continue;
  foreach ($originalArray as $k => $entry) {
    if ($entry === $key) {
      $originalArray[$k] = $entry . "_" . ($increment);
      $increment += 1;
    }
  }
}

这将更改原始数组,因此如果您可能希望创建副本,并在需要维护原始副本时更新该副本。但是,由于您的数组来源没有包含在您的代码中,我不确定您是否需要这个。

票数 0
EN

Stack Overflow用户

发布于 2022-07-14 00:38:02

创建不止一次发生的值的查找数组。然后迭代输入数组(通过引用修改值),并有条件地增加值的计数器并将其附加到字符串中。

代码:(演示)

代码语言:javascript
复制
$lookup = [];
foreach (array_count_values($array) as $value => $count) {
    if ($count > 1) {
        $lookup[$value] = 0;
    }
}
foreach ($array as &$value) {
    $value .= (isset($lookup[$value]) ? "_" . ++$lookup[$value] : '');
}

var_export($array);

输出:

代码语言:javascript
复制
array (
  0 => 'QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_1',
  1 => 'Microsoft Network Adapter Multiplexor Driver_1',
  2 => 'Microsoft Network Adapter Multiplexor Driver Simplified',
  3 => 'QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) #75',
  4 => 'QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_2',
  5 => 'Microsoft Network Adapter Multiplexor Driver_2',
  6 => 'QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_3',
  7 => 'QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_4',
)

如果您喜欢紧凑的代码,那么查找数组的填充可以如下所示:

代码语言:javascript
复制
$lookup = array_map(fn() => 0, array_diff(array_count_values($array), [1]));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72973542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档