Laravel PHP:按字母顺序在下拉列表中显示数组元素,而不使用sort()

时间:2014-11-26 19:28:29

标签: php laravel-4

我有一个Laravel PHP照片库应用程序,允许用户创建一个相册,然后从下拉列表中将照片插入到他们选择的相册中。这要求用户首先创建专辑,因为下拉列表是动态的,基于哪些专辑实际存在。下拉列表当前正常运行,但不按字母顺序显示专辑(数组元素)。

我尝试过使用'sort()'方法,但问题是数组元素id在这样做时会被切换/重新排序。我不希望对数组ID进行重新排序,因为这会将照片放入错误的相册中。

所以我想知道是否有办法在下拉列表中按字母顺序显示相册,而不是重新排序其数组元素ID。

控制器:

public function create()
{
    $stoneArray = $this->stone->all()->toArray();

    if (empty($stoneArray)) {
        $dropdown[0] = 'There are no stones';
    }

    foreach ($stoneArray as $stone) {
        $dropdown[$stone['stone_id']] = $stone['stone_name'];
        // sort($dropdown); /* This re-sorted the array element ids */

    }

    $data = array('type' => 'stone_photo', 'dropdown' => $dropdown);
    $this->layout->content = \View::make('forms.stones.new-photo', $data);
}

查看:

<div class="form-group">
    {{ Form::label('stone_id', 'Stone: ') }}
    {{ Form::select('stone_id', $dropdown, array('class' => 'form-control')) }}
</div>

非常感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

修改

我在这里对你的文件结构做了一些假设,但它应该给你一个想法。

在:app\Acme\repositories\Eloquent\EloquentStoneRepository.php或你所谓的任何内容中,都有一个功能:

public function all()
{
  return Stone::all();
}

(我认为这看起来像什么,但我并不积极)。尝试将其更改为:

public function all()
{
  return Stone::orderBy('column_name', 'asc')->get();
}

如果您在其他地方使用all()并且不希望它排序,请考虑添加其他功能:

public function all_sorted()
{
  return Stone::orderBy('column_name', 'asc')->get();
}

希望有所帮助!

编辑: 将->all()更改为->get(),以便雄辩可以对其进行正确排序。