2015-10-14 58 views
1

鉴于以下代码发生器参考不工作

public static function &generate($arr) 
{ 
    foreach ($arr as $key => $value) { 
     yield $key => $value; 
    } 
} 

此静态方法应产生$密钥=>每个阵列迭代

然后,我使用静态方法中的另一类上$值由参考:

$questions = $request->questions; 

foreach (self::generate($questions) as &$question) { 
    $question['label'] = json_encode($question['label']); 

    ... other code 
} 

unset($question); 

die(var_dump($questions[0]['label'])); 

我应该有一个json编码的字符串,但我总是有一个数组,我不明白为什么。

  • 在$请求VAR的questions属性不存在,它是由魔术方法__getquestions是阵列的内部,从而该值通过__get返回)
  • 如果删除返回的生成方法并给予$questions我的foreach,它的作品,我有我的JSON编码字符串

回答

1

您需要确保传递按引用“一路通”

public static function &generate(&$arr) 
{ 
    foreach ($arr as $key => &$value) { 
     yield $key => $value; 
    } 
} 

对于$arr$value

+0

哦,干得好!我从来没有在函数/方法原型中看到给定参数的'&',所以今天我学到了一件大事! 谢谢:) – everytimeicob

+0

发电机和通过引用是古怪的,一般不建议 –

+0

好吧谢谢你的提示:) – everytimeicob