我是PHP新手,学习速度快但速度不够快!我也在学习Laravel 5.1。
我正在尝试使用正确的表单构建器格式(Form::select
)从Eloquent查询输出构建HTML选择列表数组。
我跟随Eloquent调用以获取数据:
// Get list of States for address select
$states = State::all()->toArray();
返回以下数组:
array:8 [▼
0 => array:2 [▼
"id" => "1"
"state" => "ACT"
]
1 => array:2 [▼
"id" => "2"
"state" => "NSW"
]
...
];
我想遍历它并生成以下输出:
array = [
'' => 'State', <-- This is the default for the select list
'1' => 'ACT',
'2' => 'NSW',
...
];
我正在使用Laravel 5.1,所以我在帮助器中使用了包含的array_add()
函数。
我这样称呼我的功能:
$states = create_select_list($states, 'State');
我接下来要格式化输出,以便为Form::select
语句做好准备。我已经尝试了下面的代码(作为几次迭代的最后一次尝试!)但是没有成功。
function create_select_list($data, $default)
{
// Declare array and set up default select item
$container = ['' => $default];
// Loop through data entries and build select list array
foreach($data as list($entry, list($key, $value))) {
$container = array_add($container, $key, $value);
}
// Return the select list array
return $container;
}
感谢所有帮助或建议!
答案 0 :(得分:2)
这个答案与循环修复无关。我认为以前的评论可以帮到你。
只是另一个想法。对于这种情况,您可以尝试使用array_map而不是foreach。
例如:
$states = ['' => 'State'];
array_map(function($item) use (&$states) {
$states[$item['id']] = $item['state'];
}, State::all()->toArray());
答案 1 :(得分:1)
循环如下:
foreach($data as $key => $keyArr ) {
$container = array_add($container, $keyArr['id'], $keyArr['state']);
}
答案 2 :(得分:0)
您不需要在list()
循环中使用foreach
,而是尝试:
foreach($data as $key => $value) {
$container = array_add($container, $key, $value);
}
PHP documentation很好地概述了list()
实际做了什么。