繁体   English   中英

数组未添加到foreach循环中的变量

[英]Array not being added to variable in foreach loop

遇到一个奇怪的问题,我正在解决这个问题。

我有这个foreach循环

$rubrics = ReaderRubric::where('cycle_subpool_id', "=", $cycle_subpool_id)->get();
foreach ($rubrics as &$rubric) {
    $answers = ReaderRubricAnswer::where('rubric_id', "=", $rubric->rubric_id)->get();
    $rubric['answers'] = $answers;
}

unset($rubric);

Log::info($rubrics);
return $rubrics;

$rubrics日志

[{"rubric_id":1,"reader_type":24,"document_type":"0","title":"test","question":"qweqwe","activity_type":null},{"rubric_id":2,"reader_type":21,"document_type":"0","title":"test","question":"testing","activity_type":null}]

$rubric['answer']循环记录

[{"answer_id":5,"rubric_id":2,"text":"asn 1","value":1},{"answer_id":6,"rubric_id":2,"text":"ans 2","value":2},{"answer_id":7,"rubric_id":2,"text":"ans 3","value":3}]

var_dump($ rubrics);

object(Illuminate\Database\Eloquent\Collection)#74 (1) {
  ["items":protected]=>
  array(2) {
    [0]=>
    object(Entrada\Modules\Admissions\Models\Entrada\ReaderRubric)#75 (26) {
      ["dateFormat":protected]=>
      string(1) "U"
      ["connection":protected]=>
      string(16) "entrada_database"
      ["table":protected]=>
      string(24) "admissions_reader_rubric"
      ["primaryKey":protected]=>
      string(9) "rubric_id"
      ["fillable":protected]=>
      array(5) {
        [0]=>
        string(11) "reader_type"
        [1]=>
        string(13) "document_type"
        [2]=>
        string(5) "title"
        [3]=>
        string(8) "question"
        [4]=>
        string(13) "activity_type"
      }

如果我检查日志中是否有$rubrics$rubric['answers']则完全正确。

但是,如果我var dump $rubrics ,则它们都不会有$rubric['answers']

我知道这很简单,我盯着它看太久了,现在看不到它。

谢谢!

当您使用普通的PHP数组时,有几种方法可以解决此问题。 但是由于您有一个Collection某些类似行为的数组不起作用。 我认为这个小变通办法应该足以使“神奇”的吸气剂/吸气剂起作用:

foreach ($rubrics as $key => $rubric) {
  $answers = ReaderRubricAnswer::where('rubric_id', "=", $rubric->rubric_id)->get();
  $rubric['answers'] = $answers;
  $rubrics[$key] = $rubric;
  Log::info($rubrics[$key]['answers']);
 }

$rubrics不是数组,它是实现Traversable数组的对象,因此您可以对其进行迭代。

您可以让循环将元素推入真实数组。

$rubrics_array = [];
foreach ($rubrics as $rubric) {
    // do stuff to $rubric
    // ...
    $rubrics_array[] = $rubric;
}

从这里开始,使用$rubrics_array代替$rubrics

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM