PHP数组循环和格式

时间:2015-08-17 08:53:08

标签: php arrays laravel-5.1

我是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;
}

感谢所有帮助或建议!

3 个答案:

答案 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()实际做了什么。