此函数尝试重命名$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;
}