【发布时间】:2015-03-11 23:14:40
【问题描述】:
当前运行 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 个键,但是一旦将其传递到视图,所有内容都会转移以填补空白。这最终会导致问题,因为 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
));
}
【问题讨论】:
-
你能告诉我们完整的控制器动作吗?
-
这可能是我没有使用列表的原因。如果你改变它对你有用吗:
$owners = User::select("username", "id")->distinct()->get();? -
@lukasgeiter 添加了方法。
-
在
array_unshift之前执行dd($owners)并记下结果。然后在array_unshift之后执行一个,然后更改密钥还是仅在发送到tasks.edit时更改? -
@TimLewis 就是这样...
array_unshift没有保留密钥。
标签: php arrays laravel laravel-4