我有一个主阵列主要('质量','有效性','有效性','质量','质量','质量') 和一个具有唯一值的数组 的独特( '质量', '效能')
取决于主数组中唯一数组元素的出现,我想在主数组中为一个值附加一个整数我知道在perl中可以用一种简单的方式...
foreach $uni(@unique){
foreach $val(@main){
$i = 1;
if($val eq $uni){
$val =~ s/(.*)/$1\_$i/;
$i ++;
}
}
}
现在我期待的输出是主要的
( 'Quality_1', 'Effectiveness_1', 'Effectiveness_2', 'Quality_2', 'Quality_3')
我正在尝试将main中的值替换为附加的整数,因为我想维护主数组中的顺序。
请你帮我在php中做同样的事情。 这是我在php中的不完整代码:
foreach($uni_arr as $value){
foreach($type_of_metric_main as $metric){
if($metric == $value){
$metric = preg_replace("(.*)","$match[1]_$i",$metric);
// Need help here
}
}
答案 0 :(得分:0)
下面是你的正则表达式,我不知道为什么你使用正则表达式,在这种情况下你可以简单地使用.
运算符将后缀连接到字符串。
$metric = preg_replace("/(.*)/","$1_$i",$metric);
答案 1 :(得分:0)
即使没有正则表达式,你也可以做你想做的事。这里有一个简单的例子:
$main = array('Quality', 'Effectiveness', 'Effectiveness', 'Quality', 'Quality', 'Quality');
$unique = array('Quality', 'Effectiveness');
foreach ($unique as $unique_value) {
$counter = 0;
foreach ($main as $key => $value) {
if ($value === $unique_value) {
++$counter;
$main[$key] = $value . '_' . $counter;
}
}
}
unset($unique_value);
答案 2 :(得分:0)
首先,虽然据说Perl基于“TMTOWTDI”的原则,但语言倾向于使用Regex来解决问题。在这种情况下,我不会
"$matches[1]"
也不明确。您是否希望PHP将$matches
解释为var或$matches[1]
?它不知道。在双引号内使用数组时,您应该使用花括号来表示清晰度:"{$matches[1]}_$i"
。也就是说,preg_*
函数不会创建$matches
数组,而是定期反向引用。你的意思是"$1_$i"
。但除此之外,下面是一个更高效的方法(没有正则表达式,没有嵌套循环):
在PHP中也不是那么难。更重要的是,它甚至不需要嵌套循环。
$main = array('Quality','Effectiveness','Effectiveness','Quality','Quality','Quality');
$unique = array_unique($main);
$count = array_fill_keys($unique, 1);//init all counts to 1
foreach($main as $key => $val)
{
if ($count[$val])
{//can be left out, if the unique array is produced by an array_unique call
$main[$key] .= '_'.$count[$val];//append counter
$count[$val]++;//increment count
}
}
print_r($main);
就是这样。您可以使用foreach
构造并通过引用迭代主数组:
$count = array_fill_keys($unique, 0);//init to 0
foreach($main as &$val)
{
$count[$val]++;//increment, before changing $val
$val .= '_'.$count[$val];
}