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.
希望对您有所帮助!
目前 运行 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.
希望对您有所帮助!