Генератор со ссылкой не работает

Учитывая следующий код

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

Этот статический метод должен давать значение $ key => $ по ref на каждой итерации массива

Затем я использую статический метод в другом классе:

$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, но у меня всегда есть массив, я не понимаю почему.

  • questions атрибут в $ request var не существует, он возвращается магическим методом __get (questions находится внутри массива, поэтому значение возвращается __get)
  • Если я уберу метод генерации и дам $questions к моему foreach, это работает, и у меня есть моя закодированная строка json

1

Решение

Вы должны обеспечить передачу по ссылке «все путем»

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

для обоих $arr а также $value

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]