PHP递归没有正确改变数组中的值



此函数尝试重命名$a数组中的重复名称。

public function addToDuplicate($a, $b)
{
if (in_array($b, $a)) {
$b = $b."_1";
$this->addToDuplicate($a, $b);
}
return $b;
}

这个函数调用addToDuplicate函数

public function names($names_data)
{
$names= array();
foreach ($names_data as $key => $value){
if (in_array($value->name, $news_files)) {
array_push($names, $this->addToDuplicate($names, $value->name));
}else{
array_push($names, $value->name);
}
}
return $names;
}

我的$names_data就像

0=> #attributes: array:2["id" => 1
"name" => "John"] 
1=> #attributes: array:2["id" => 2
"name" => "John"] 
2=> #attributes: array:2["id" => 2
"name" => "John"] 

当我运行我的代码,我得到输出

array:3 [▼
0 => "John"
1 => "John_1"
2 => "John_1"
]

但是我想得到

array:3 [▼
0 => "John"
1 => "John_1"
2 => "John_1_1"
]

您的函数缺少的是递归的返回,在您的情况下,您只返回if条件的第一轮,而随后调用的返回丢失。我会用正确的代码报告你。

public function addToDuplicate($a, $b)
{
$values = [];
if (in_array($b, $a)) {
$b = $b."_1";
$values = array_merge($values, $this->addToDuplicate($a, $b));
} else {
$values[] = $b;
}
return $values;
}
public function names($names_data)
{
$names= array();
foreach ($names_data as $key => $value){
if (in_array($value->name, $news_files)) {
$names = array_merge($names, $this->addToDuplicate($names, $value->name));
}else{
array_push($names, $value->name);
}
}
return $names;
}

最新更新