Laravel 不保留数组键

Laravel Array Keys not Preserved

目前 运行 Laravel 4.1.31。在控制器中,一个数组由用户组成,用户的 id 作为键:

$owners = User::get()->lists('username','id');

在控制器级别打印 owners 数组将产生以下结果:

print_r($owners)

// Array
// (
//    [1] => user1
//    [2] => user2
//    [4] => user3  <--- key jumps to 4, this is correct
//    [5] => user4
//    [6] => user5
// )

然而,一旦数组传递给视图,键就不会保留,在视图级别将其打印出来会产生以下结果:

// Array
// (
//    [1] => user1
//    [2] => user2
//    [3] => user3  <--- key was replaced with 3, this is incorrect
//    [4] => user4       all values from this point on are now shifted
//    [5] => user5
// )

原始数组中没有 3 键,但是一旦将其传递给视图,所有内容都会移动以填补空白。这最终会导致问题,因为所有 2 以上的 id 现在都不匹配。如何保留数组键?

完整控制器方法:

public function edit($id) {

  // get the task
  $task = $this->task->find($id);

  // grab all users for owner field
  $owners = User::get()->lists('username','id');

  // grab all projects for project field
  $projects = Project::get()->lists('title','id');

  // add placeholder to beginning of arrays
  array_unshift($owners, 'Select Owner');
  array_unshift($projects, 'Select Project');

  // return show view
  return View::make('tasks.edit', array(
    'task'     => $task,
    'status'   => $this->status,
    'projects' => $projects,
    'owners'   => $owners
  )); 

}

array_unshift 更改数组的键。它会将它们重置为数字序列 0,1,2,3,...

使用它在数组的开头添加一个键为 "" 的值:

$owners = ['' => 'Select Owner'] + $owners;

如评论中所述,删除两个数组上的 array_unshift。在视图中,按如下方式处理:

<select name="projects">
  <option value="">Select Project</option>
  @foreach($projects AS $project)
  <option value="{{ $project->id }}">{{ $project->title }}</option>
  @endforeach
</select>

不是将第一个元素设为通用值,而是在 处理 @foreach 之前对其进行硬编码 以生成 select.

希望对您有所帮助!