代码之家  ›  专栏  ›  技术社区  ›  JonYork

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

  •  0
  • JonYork  · 技术社区  · 6 年前

    遇到了一个奇怪的问题,我要把我的头发拔出来。

    我有这个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(卢比);

    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"
          }
    

    如果我查一下日志 $卢比 $rubric['answers'] 这完全是应该的。

    但是,如果我 ,他们都没有 对他们来说。

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   jh1711    6 年前

    当您使用普通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']);
     }
    
        2
  •  0
  •   Barmar    6 年前

    $rubrics 不是数组,而是实现 Traversable

    你可以让你的循环把元素推到一个真正的数组上。

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

    从现在开始,使用 $rubrics_array 而不是 $卢比