【问题标题】:Laravel 5 adding an element in an array does not workLaravel 5 在数组中添加元素不起作用
【发布时间】:2015-12-10 00:30:08
【问题描述】:

我从表格问题中得到一个数组

$questions = Category::where('slug', $slug)->first()->questions->toArray();

然后使用 foreach 我遍历数组并在每次迭代期间推送一个数组元素,如下所示

foreach ($questions as $question) {
        $question['options'] = Option::where('question_id', $question['id'])->get()->toArray();
    }

理想情况下,我应该得到如下响应

array (size=5)
0 => 
array (size=6)
  'id' => int 1
  'category_id' => int 1
  'questions' => string 'The ozone layer restricts' (length=25)
  'answer_id' => int 4
  'image_path' => string '' (length=0)
  'options' => 
    array (size=4)
      0 => 
        array (size=3)
          ...
      1 => 
        array (size=3)
          ...
      2 => 
        array (size=3)
          ...
      3 => 
        array (size=3)
          ...
1 => 
array (size=6)
  'id' => int 2
  'category_id' => int 1
  'questions' => string 'Ecology deals with' (length=18)
  'answer_id' => int 10
  'image_path' => string '' (length=0)
  'options' => 
    array (size=4)
      0 => 
        array (size=3)
          ...
      1 => 
        array (size=3)
          ...
      2 => 
        array (size=3)
          ...
      3 => 
        array (size=3)
          ...

但实际上我没有将选项键放入我的问题数组中

【问题讨论】:

    标签: php arrays laravel-5 eloquent


    【解决方案1】:

    这里的问题是,当您执行 foreach 时,您是按值引用数组 - 也就是说,PHP 将在数组内部创建一个 copy 变量。您需要通过引用访问foreach 中的每个元素(注意$q 旁边的&

    foreach ($questions as & $q) {
            $q['options'] = Option::where('question_id', '=', $q['id'])->get()->toArray();
    }
    

    见: Passing by referencesthe PHP docs on foreach

    注意:这不是真正的 Laravel 问题,只是 PHP。

    【讨论】:

      【解决方案2】:

      试试这个(& 在 foreach 中):

      foreach ($questions as & $question) {
              $question['options'] = Option::where('question_id', $question['id'])->get()->toArray();
      }
      

      【讨论】:

        【解决方案3】:

        你可以试试:

        foreach ($questions as $key=>$question) {
            $questions[$key]['options'] = Option::where('question_id',$question['id'])->get()->toArray();
        }
        

        【讨论】:

          猜你喜欢
          • 2021-09-09
          • 2020-10-18
          • 2018-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          • 2020-09-11
          相关资源
          最近更新 更多