Laravel数组的键不保留(Laravel Array Keys not Preserved)

2019-11-03 14:23发布

目前运行Laravel 4.1.31。 在控制器的阵列是建立用户与他们的ID作为关键:

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

印刷业主阵列出在控制器级别将产生以下:

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键转移到填补缺口。 这最终导致问题,因为所有的ID的上述2现在是不匹配的。 如何才能阵列按键会保留吗?

全控制器的方法:

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
  )); 

}

Answer 1:

array_unshift改变你的阵列的钥匙。 将其重置为数字0,1,2,3的顺序,...

使用本新增价值与关键""在你的阵列的开头:

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


Answer 2:

正如在评论中指出,摆脱array_unshift上的两个阵列。 在视图,办理如下:

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

而不是使第一个元素的一般价值,处理@foreach做出选择之前硬编码。

希望帮助!



文章来源: Laravel Array Keys not Preserved