我有一个PHP数组如下:
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数组中识别重复的值,并在末尾使用数字重命名,如下所示,
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
发布于 2022-07-14 00:09:54
这应该能起作用:
$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;
}
}
}这将更改原始数组,因此如果您可能希望创建副本,并在需要维护原始副本时更新该副本。但是,由于您的数组来源没有包含在您的代码中,我不确定您是否需要这个。
发布于 2022-07-14 00:38:02
创建不止一次发生的值的查找数组。然后迭代输入数组(通过引用修改值),并有条件地增加值的计数器并将其附加到字符串中。
代码:(演示)
$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);输出:
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',
)如果您喜欢紧凑的代码,那么查找数组的填充可以如下所示:
$lookup = array_map(fn() => 0, array_diff(array_count_values($array), [1]));https://stackoverflow.com/questions/72973542
复制相似问题