0

我遇到错误的问题

PHP 致命错误:调用时传递引用已在...中删除

我发现了一些类似的问题,例如

但是没有什么能提供真实的答案如何解决您需要将传递的值声明为运行时引用的情况,例如您无法更改函数声明的内置函数?

例如,对于这个例子,第三个 array_walk 参数作为参考:?

我尝试使用此解决方案通过以下代码更改数组的索引:

function __reindex(&$v,$k, &$aReindexed) 
{ 
   $kNew = $k+100;
   $aReindexed[$kNew] = $v; 
}


$aTest = array(4,"f","_","test");
array_walk($aTest,"__reindex", &$aReindexed );

没有引用的代码不起作用(新数组未更改并保持为空)。

并且带有它的引用的代码有效,但不适用于 php 5.4 及更高版本。

那么处理这种情况的方法是什么?

ps 如果有人喜欢说“将 __reindex 函数中的 $k 变量声明为引用”,那么这将不起作用(这是我尝试的第一种方法)

4

1 回答 1

0

我找到了一种可能对某些人有所帮助的方法。

试试这个代码

$aTest = array(4,"f","_","test");
$aReindexed = array();

array_walk($aTest, function(&$v,$k) use (&$aReindexed) { 
  $kNew = $k+100;
  $aReindexed[$kNew] = $v; 
} );

print_r($aReindexed);

这可以在 php 5.4 及更高版本中工作。

但它不适用于较低的 php 版本,并且您不能将其与已经存在的(非匿名)回调函数一起使用,因为 USE-Keyword 仅在您创建新的 Closure 函数时才有效。

于 2019-12-06T13:16:50.000 回答